Parcourir la source

qcacmn: Fix TDLS UMAC memory init issues

scheduler message structure needs to be initialised to zero
before populating it contents.
Init scheduler msg structure to zero during the structure
declaration.

Change-Id: Ib6281b7d3b0a103be5adf65d12c20a28f48065f5
CRs-Fixed: 2034220
Kabilan Kannan il y a 8 ans
Parent
commit
021a75a82b

+ 1 - 1
umac/tdls/core/src/wlan_tdls_ct.c

@@ -1165,7 +1165,7 @@ QDF_STATUS tdls_delete_all_tdls_peers(struct wlan_objmgr_vdev *vdev,
 {
 	struct wlan_objmgr_peer *peer;
 	struct tdls_del_all_tdls_peers *del_msg;
-	struct scheduler_msg msg;
+	struct scheduler_msg msg = {0};
 	QDF_STATUS status;
 
 

+ 2 - 3
umac/tdls/core/src/wlan_tdls_main.c

@@ -805,10 +805,8 @@ static void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
 	tdls_state_param_setting_dump(tdls_info_to_fw);
 
 	status = tdls_update_fw_tdls_state(tdls_soc_obj, tdls_info_to_fw);
-	if (QDF_STATUS_SUCCESS != status) {
-		qdf_mem_free(tdls_info_to_fw);
+	if (QDF_STATUS_SUCCESS != status)
 		goto done;
-	}
 
 	if (sta_connect_event) {
 		tdls_soc_obj->set_state_info.set_state_cnt++;
@@ -828,6 +826,7 @@ static void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
 		tdls_mgmt_rx_ops(tdls_soc_obj->soc, false);
 
 done:
+	qdf_mem_free(tdls_info_to_fw);
 	tdls_process_session_update(tdls_soc_obj->soc,
 					TDLS_CMD_SESSION_INCREMENT);
 	return;

+ 1 - 2
umac/tdls/core/src/wlan_tdls_mgmt.c

@@ -225,8 +225,7 @@ static QDF_STATUS tdls_activate_send_mgmt_request(
 	struct wlan_objmgr_peer *peer;
 	struct tdls_soc_priv_obj *tdls_soc_obj;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
-
-	struct scheduler_msg msg;
+	struct scheduler_msg msg = {0};
 	struct tdls_send_mgmt_request *tdls_mgmt_req;
 
 	if (!action_req || !action_req->vdev)

+ 1 - 1
umac/tdls/dispatcher/src/wlan_tdls_tgt_api.c

@@ -225,7 +225,7 @@ QDF_STATUS tgt_tdls_mgmt_frame_process_rx_cb(
 	struct tdls_rx_mgmt_frame *rx_mgmt;
 	struct tdls_rx_mgmt_event *rx_mgmt_event;
 	struct tdls_soc_priv_obj *tdls_soc_obj;
-	struct scheduler_msg msg;
+	struct scheduler_msg msg = {0};
 	struct wlan_objmgr_vdev *vdev;
 	uint32_t vdev_id;
 	uint8_t *pdata;

+ 8 - 0
umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c

@@ -285,7 +285,15 @@ QDF_STATUS ucfg_tdls_psoc_disable(struct wlan_objmgr_psoc *psoc)
 		tdls_err("NULL psoc");
 		return QDF_STATUS_E_FAILURE;
 	}
+
 	status = tgt_tdls_unregister_ev_handler(psoc);
+	if (QDF_IS_STATUS_ERROR(status))
+		tdls_err("Failed to unregister tdls event handler");
+
+	status = tdls_mgmt_rx_ops(psoc, false);
+	if (QDF_IS_STATUS_ERROR(status))
+		tdls_err("Failed to unregister mgmt rx callback");
+
 	soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
 							WLAN_UMAC_COMP_TDLS);
 	if (!soc_obj) {