Browse Source

qcacld-3.0: Fix KW issue in connection manager

Fix KW issue in connection manager.
-- In lim_cm_create_session() do not use pe_session after null check.
-- In lim_send_peer_create_resp() and wlan_hdd_cm_connect() add
   vdev null check.

Change-Id: I8e78e7209d330b5551293af6ff5914dc696f6093
CRs-Fixed: 2933839
Utkarsh Bhatnagar 4 years ago
parent
commit
02c7d39bb3

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

@@ -377,6 +377,8 @@ int wlan_hdd_cm_connect(struct wiphy *wiphy,
 	qdf_mem_zero(&params, sizeof(params));
 	ucfg_blm_dump_black_list_ap(hdd_ctx->pdev);
 	vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_CM_ID);
+	if (!vdev)
+		return -EINVAL;
 
 	ucfg_pmo_flush_gtk_offload_req(vdev);
 

+ 2 - 0
core/mac/src/pe/lim/lim_process_mlm_req_messages.c

@@ -398,6 +398,8 @@ void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc,
 						    vdev_id,
 						    WLAN_LEGACY_MAC_ID);
+	if (!vdev)
+		return;
 	wlan_cm_bss_peer_create_rsp(vdev, status,
 				    (struct qdf_mac_addr *)peer_mac);
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);

+ 1 - 14
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -3028,7 +3028,6 @@ lim_cm_create_session(struct mac_context *mac_ctx, struct cm_vdev_join_req *req)
 {
 	struct pe_session *pe_session;
 	uint8_t session_id;
-	struct wlan_objmgr_vdev *vdev;
 
 	pe_session = pe_find_session_by_bssid(mac_ctx, req->entry->bssid.bytes,
 					      &session_id);
@@ -3043,15 +3042,6 @@ lim_cm_create_session(struct mac_context *mac_ctx, struct cm_vdev_join_req *req)
 		return NULL;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc,
-						    req->vdev_id,
-						    WLAN_MLME_CM_ID);
-	if (!vdev) {
-		pe_err("vdev_id: %d cm_id 0x%x : vdev not found", req->vdev_id,
-		       req->cm_id);
-		return NULL;
-	}
-
 	pe_session = pe_create_session(mac_ctx, req->entry->bssid.bytes,
 			&session_id,
 			mac_ctx->lim.max_sta_of_pe_session,
@@ -3062,9 +3052,6 @@ lim_cm_create_session(struct mac_context *mac_ctx, struct cm_vdev_join_req *req)
 		       QDF_MAC_ADDR_FMT, req->vdev_id, req->cm_id,
 		       QDF_MAC_ADDR_REF(req->entry->bssid.bytes));
 
-	pe_session->cm_id = req->cm_id;
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
-
 	return pe_session;
 }
 
@@ -3598,10 +3585,10 @@ lim_cm_handle_join_req(struct cm_vdev_join_req *req)
 	lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_JOIN_REQ_EVENT, NULL, 0, 0);
 
 	pe_session = lim_cm_create_session(mac_ctx, req);
-
 	if (!pe_session)
 		goto fail;
 
+	pe_session->cm_id = req->cm_id;
 	status = lim_fill_session_params(mac_ctx, pe_session, req);
 
 	if (QDF_IS_STATUS_ERROR(status))