qcacld-3.0: Fix sta_info_container freed without init

Issue happens when wlan0 is created then hostapd change
it from sta to ap mode before start wlan0 adapter,
then interface is deleted; as hdd_sta_info_init only happens
when start ap adapter, so there will be issue when destroy
sta_obj_lock as sta_obj_lock was never init.

Change:
    Move init sta_info to open adapter and init sta_info
    for all modes, so this will simply the logic and
    no need to consider too much about adapter state change.

Change-Id: I5e90ec120b2ec487507d9bda2f8c18c9a54d2a01
CRs-Fixed: 2554812
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index f2b7ee7..bb1843e 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -3412,23 +3412,11 @@
 	/* Initialize the data path module */
 	hdd_softap_init_tx_rx(adapter);
 
-	status = hdd_sta_info_init(&adapter->sta_info_list);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		hdd_err("sta info init failed");
-		goto error_release_softap_tx_rx;
-	}
-
-	status = hdd_sta_info_init(&adapter->cache_sta_info_list);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		hdd_err("cache sta info init failed");
-		goto error_release_sta_info;
-	}
-
 	status = hdd_wmm_adapter_init(adapter);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("hdd_wmm_adapter_init() failed code: %08d [x%08x]",
 		       status, status);
-		goto error_release_wmm;
+		goto error_release_softap_tx_rx;
 	}
 
 	set_bit(WMM_INIT_DONE, &adapter->event_flags);
@@ -3468,10 +3456,6 @@
 
 	return status;
 
-error_release_wmm:
-	hdd_sta_info_deinit(&adapter->cache_sta_info_list);
-error_release_sta_info:
-	hdd_sta_info_deinit(&adapter->sta_info_list);
 error_release_softap_tx_rx:
 	hdd_unregister_wext(adapter->dev);
 	hdd_softap_deinit_tx_rx(adapter);
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index bc1f1f5..7162455 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -5024,12 +5024,8 @@
 	qdf_mutex_destroy(&adapter->disconnection_status_lock);
 	hdd_apf_context_destroy(adapter);
 	qdf_spinlock_destroy(&adapter->vdev_lock);
-
-	if (adapter->device_mode == QDF_SAP_MODE ||
-	    adapter->device_mode == QDF_P2P_GO_MODE) {
-		hdd_sta_info_deinit(&adapter->sta_info_list);
-		hdd_sta_info_deinit(&adapter->cache_sta_info_list);
-	}
+	hdd_sta_info_deinit(&adapter->sta_info_list);
+	hdd_sta_info_deinit(&adapter->cache_sta_info_list);
 
 	wlan_hdd_debugfs_csr_deinit(adapter);
 	if (adapter->device_mode == QDF_STA_MODE)
@@ -5732,6 +5728,7 @@
 		INIT_WORK(&adapter->ipv6_notifier_work,
 			  hdd_ipv6_notifier_work_queue);
 #endif
+
 		break;
 	case QDF_FTM_MODE:
 		adapter = hdd_alloc_station_adapter(hdd_ctx, mac_addr,
@@ -5774,6 +5771,8 @@
 	qdf_list_create(&adapter->blocked_scan_request_q, WLAN_MAX_SCAN_COUNT);
 	qdf_mutex_create(&adapter->blocked_scan_request_q_lock);
 	qdf_event_create(&adapter->acs_complete_event);
+	hdd_sta_info_init(&adapter->sta_info_list);
+	hdd_sta_info_init(&adapter->cache_sta_info_list);
 
 	if (QDF_STATUS_SUCCESS == status) {
 		/* Add it to the hdd's session list. */