Browse Source

qcacld-3.0: Fix issues in connect and disconnect path

Fix issues in connect and disconnect path.

Change-Id: Iccc2f564943939a024923eeb4a958b2838c311ab
CRs-Fixed: 2856501
gaurank kathpalia 4 years ago
parent
commit
9b5c17c60e

+ 1 - 0
core/hdd/src/wlan_hdd_cm_connect.c

@@ -746,6 +746,7 @@ static void hdd_cm_save_connect_info(struct hdd_adapter *adapter,
 				   sta_ctx->conn_info.auth_type);
 		hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_CM_ID);
 	}
+	qdf_mem_free(bcn_ie);
 
 	hdd_cm_save_bss_info(adapter, rsp);
 }

+ 3 - 2
core/hdd/src/wlan_hdd_main.c

@@ -7083,8 +7083,9 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
 
 		if (adapter->device_mode == QDF_NDI_MODE ||
 #ifdef FEATURE_CM_ENABLE
-		    adapter->device_mode == QDF_STA_MODE ||
-		    adapter->device_mode == QDF_P2P_CLIENT_MODE
+		    ((adapter->device_mode == QDF_STA_MODE ||
+		      adapter->device_mode == QDF_P2P_CLIENT_MODE) &&
+		      !hdd_cm_is_disconnected(adapter))
 #else
 		    hdd_conn_is_connected(sta_ctx) ||
 		    hdd_cm_is_connecting(adapter)

+ 3 - 6
core/hdd/src/wlan_hdd_twt.c

@@ -2203,7 +2203,6 @@ static int hdd_twt_get_capabilities(struct hdd_adapter *adapter,
 				    struct nlattr *twt_param_attr)
 {
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	struct hdd_station_ctx *hdd_sta_ctx;
 	QDF_STATUS status;
 	int ret = 0;
 
@@ -2216,11 +2215,9 @@ static int hdd_twt_get_capabilities(struct hdd_adapter *adapter,
 		return -EOPNOTSUPP;
 	}
 
-	hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
-	if (hdd_sta_ctx->conn_info.conn_state != eConnectionState_Associated) {
-		hdd_err_rl("Invalid state, vdev %d mode %d state %d",
-			   adapter->vdev_id, adapter->device_mode,
-			   hdd_sta_ctx->conn_info.conn_state);
+	if (!hdd_cm_is_vdev_associated(adapter)) {
+		hdd_err_rl("vdev %d not in connected state, mode %d",
+			   adapter->vdev_id, adapter->device_mode);
 		return -EINVAL;
 	}
 

+ 5 - 5
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -194,7 +194,7 @@ static void lim_copy_tspec_ie(struct pe_session *pe_session,
 	if (pe_session->tspecIes) {
 		rsp->tspec_ie.len = pe_session->tspecLen;
 		rsp->tspec_ie.ptr =
-		    qdf_mem_malloc(sizeof(rsp->tspec_ie.len));
+		    qdf_mem_malloc(rsp->tspec_ie.len);
 		if (!rsp->tspec_ie.ptr)
 			return;
 
@@ -266,7 +266,7 @@ lim_cm_prepare_join_rsp_from_pe_session(struct mac_context *mac_ctx,
 	if (pe_session->beacon) {
 		connect_ie->bcn_probe_rsp.len = pe_session->bcnLen;
 		connect_ie->bcn_probe_rsp.ptr =
-			qdf_mem_malloc(sizeof(connect_ie->bcn_probe_rsp.len));
+			qdf_mem_malloc(connect_ie->bcn_probe_rsp.len);
 		if (!connect_ie->bcn_probe_rsp.ptr)
 			return QDF_STATUS_E_NOMEM;
 
@@ -279,7 +279,7 @@ lim_cm_prepare_join_rsp_from_pe_session(struct mac_context *mac_ctx,
 	if (pe_session->assoc_req) {
 		connect_ie->assoc_req.len = pe_session->assocReqLen;
 		connect_ie->assoc_req.ptr =
-			qdf_mem_malloc(sizeof(connect_ie->assoc_req.len));
+				qdf_mem_malloc(connect_ie->assoc_req.len);
 		if (!connect_ie->assoc_req.ptr)
 			return QDF_STATUS_E_NOMEM;
 
@@ -290,7 +290,7 @@ lim_cm_prepare_join_rsp_from_pe_session(struct mac_context *mac_ctx,
 	if (pe_session->assocRsp) {
 		connect_ie->assoc_rsp.len = pe_session->assocRspLen;
 		connect_ie->assoc_rsp.ptr =
-			qdf_mem_malloc(sizeof(connect_ie->assoc_rsp.len));
+			qdf_mem_malloc(connect_ie->assoc_rsp.len);
 		if (!connect_ie->assoc_rsp.ptr)
 			return QDF_STATUS_E_NOMEM;
 
@@ -306,7 +306,7 @@ lim_cm_prepare_join_rsp_from_pe_session(struct mac_context *mac_ctx,
 		if (pe_session->ricData) {
 			rsp->ric_resp_ie.len = pe_session->RICDataLen;
 			rsp->ric_resp_ie.ptr =
-			    qdf_mem_malloc(sizeof(rsp->ric_resp_ie.len));
+			    qdf_mem_malloc(rsp->ric_resp_ie.len);
 			if (!rsp->ric_resp_ie.ptr)
 				return QDF_STATUS_E_NOMEM;
 

+ 1 - 1
core/sme/src/csr/csr_api_roam.c

@@ -14073,6 +14073,7 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
 	}
 	/* update bss desc */
 	session->pConnectBssDesc = bss_desc;
+	conn_profile = &session->connectedProfile;
 	csr_fill_enc_type(&conn_profile->EncryptionType,
 			  cur_node->entry->neg_sec_info.ucastcipherset);
 	csr_fill_enc_type(&conn_profile->mcEncryptionType,
@@ -14082,7 +14083,6 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
 			   cur_node->entry->neg_sec_info.key_mgmt,
 			   cur_node->entry->neg_sec_info.ucastcipherset);
 
-	conn_profile = &session->connectedProfile;
 	conn_profile->modifyProfileFields.uapsd_mask = rsp->uapsd_mask;
 	conn_profile->BSSType = eCSR_BSS_TYPE_INFRASTRUCTURE;
 	conn_profile->op_freq = rsp->connect_rsp.freq;

+ 1 - 1
core/wma/src/wma_dev_if.c

@@ -2321,7 +2321,7 @@ cm_send_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev)
 	if (!wma)
 		return QDF_STATUS_E_INVAL;
 
-	if (wlan_vdev_mlme_is_init_state(vdev)) {
+	if (wlan_vdev_mlme_is_init_state(vdev) == QDF_STATUS_SUCCESS) {
 		wma_remove_bss_peer_on_failure(wma, vdev_id);
 		return QDF_STATUS_SUCCESS;
 	}