瀏覽代碼

qcacld-3.0: Tdls avoid peer access after peer deletion

Currently, peer can be accessed after deletion in hdd because
cdp_clear_peer called via tdls_process_del_peer_rsp
tries to remove peer from physical device after deletion of
peer in datapath.

Fix is to remove cdp_clear_peer from hdd as it is handled by
cdp_peer_delete.

Change-Id: Ibdeb9a2a8dcf3318d66a48b9e9c7ca4d5cd74cb3
CRs-Fixed: 2663555
Pankaj Singh 5 年之前
父節點
當前提交
9dcc7e0e82

+ 1 - 10
components/tdls/core/src/wlan_tdls_cmds_process.c

@@ -1529,17 +1529,8 @@ QDF_STATUS tdls_process_del_peer_rsp(struct tdls_del_sta_rsp *rsp)
 
 			id = wlan_vdev_get_id(vdev);
 
-			if (TDLS_IS_LINK_CONNECTED(curr_peer)) {
-				soc_obj->tdls_dereg_peer(
-					soc_obj->tdls_peer_context,
-					id, &curr_peer->peer_mac);
+			if (TDLS_IS_LINK_CONNECTED(curr_peer))
 				tdls_decrement_peer_count(soc_obj);
-			} else if (TDLS_LINK_CONNECTING ==
-				   curr_peer->link_status) {
-				soc_obj->tdls_dereg_peer(
-					soc_obj->tdls_peer_context,
-					id, &curr_peer->peer_mac);
-			}
 		}
 		tdls_reset_peer(vdev_obj, macaddr);
 		conn_rec[sta_idx].valid_entry = false;

+ 0 - 5
components/tdls/core/src/wlan_tdls_ct.c

@@ -1294,11 +1294,6 @@ void tdls_disable_offchan_and_teardown_links(
 		 */
 		tdls_reset_peer(tdls_vdev, curr_peer->peer_mac.bytes);
 
-		if (tdls_soc->tdls_dereg_peer)
-			tdls_soc->tdls_dereg_peer(
-					tdls_soc->tdls_peer_context,
-					wlan_vdev_get_id(vdev),
-					&curr_peer->peer_mac);
 		tdls_decrement_peer_count(tdls_soc);
 		tdls_soc->tdls_conn_info[staidx].valid_entry = false;
 		tdls_soc->tdls_conn_info[staidx].session_id = 255;

+ 0 - 5
components/tdls/core/src/wlan_tdls_main.c

@@ -514,11 +514,6 @@ static QDF_STATUS tdls_process_reset_all_peers(struct wlan_objmgr_vdev *vdev)
 
 		tdls_reset_peer(tdls_vdev, curr_peer->peer_mac.bytes);
 
-		if (tdls_soc->tdls_dereg_peer)
-			tdls_soc->tdls_dereg_peer(
-					tdls_soc->tdls_peer_context,
-					wlan_vdev_get_id(vdev),
-					&curr_peer->peer_mac);
 		tdls_decrement_peer_count(tdls_soc);
 		tdls_soc->tdls_conn_info[staidx].valid_entry = false;
 		tdls_soc->tdls_conn_info[staidx].session_id = 255;

+ 0 - 2
components/tdls/core/src/wlan_tdls_main.h

@@ -172,7 +172,6 @@ struct tdls_set_state_info {
  * @tdls_evt_cb_data: tdls event user data
  * @tdls_peer_context: userdata for register/deregister TDLS peer
  * @tdls_reg_peer: register tdls peer with datapath
- * @tdls_dereg_peer: deregister tdls peer from datapath
  * @tx_q_ack: queue for tx frames waiting for ack
  * @tdls_con_cap: tdls concurrency support
  * @tdls_send_mgmt_req: store eWNI_SME_TDLS_SEND_MGMT_REQ value
@@ -215,7 +214,6 @@ struct tdls_soc_priv_obj {
 	void *tdls_evt_cb_data;
 	void *tdls_peer_context;
 	tdls_register_peer_callback tdls_reg_peer;
-	tdls_deregister_peer_callback tdls_dereg_peer;
 	tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
 	qdf_list_t tx_q_ack;
 	enum tdls_conc_cap tdls_con_cap;

+ 0 - 2
components/tdls/dispatcher/inc/wlan_tdls_public_structs.h

@@ -650,7 +650,6 @@ typedef void (*tdls_vdev_deinit_cb)(struct wlan_objmgr_vdev *vdev);
  * @tdls_evt_cb_data: tdls event data
  * @tdls_peer_context: userdata for register/deregister TDLS peer
  * @tdls_reg_peer: register tdls peer with datapath
- * @tdls_dereg_peer: deregister tdls peer from datapath
  * @tdls_dp_vdev_update: update vdev flags in datapath
  * @tdls_osif_init_cb: callback to initialize the tdls priv
  * @tdls_osif_deinit_cb: callback to deinitialize the tdls priv
@@ -671,7 +670,6 @@ struct tdls_start_params {
 	void *tdls_evt_cb_data;
 	void *tdls_peer_context;
 	tdls_register_peer_callback tdls_reg_peer;
-	tdls_deregister_peer_callback tdls_dereg_peer;
 	tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
 	tdls_vdev_init_cb tdls_osif_init_cb;
 	tdls_vdev_deinit_cb tdls_osif_deinit_cb;

+ 0 - 1
components/tdls/dispatcher/src/wlan_tdls_ucfg_api.c

@@ -298,7 +298,6 @@ QDF_STATUS ucfg_tdls_update_config(struct wlan_objmgr_psoc *psoc,
 
 	/* Save callbacks to register/deregister TDLS sta with datapath */
 	soc_obj->tdls_reg_peer = req->tdls_reg_peer;
-	soc_obj->tdls_dereg_peer = req->tdls_dereg_peer;
 	soc_obj->tdls_peer_context = req->tdls_peer_context;
 
 	/* Save legacy PE/WMA commands in TDLS soc object */

+ 0 - 17
core/hdd/inc/wlan_hdd_assoc.h

@@ -341,23 +341,6 @@ int hdd_set_csr_auth_type(struct hdd_adapter *adapter,
  */
 QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
 				     const uint8_t *peerMac, uint8_t qos);
-/**
- * hdd_roam_deregister_tdlssta() - deregister new TDLS station
- * @adapter: pointer to adapter
- * @peer_mac: peer mac address
- *
- * Return: QDF_STATUS enumeration
- */
-QDF_STATUS hdd_roam_deregister_tdlssta(struct hdd_adapter *adapter,
-				       struct qdf_mac_addr *peer_mac);
-
-#else
-static
-inline QDF_STATUS hdd_roam_deregister_tdlssta(struct hdd_adapter *adapter,
-					      struct qdf_mac_addr *peer_mac)
-{
-	return QDF_STATUS_SUCCESS;
-}
 #endif
 
 #ifdef FEATURE_WLAN_ESE

+ 0 - 10
core/hdd/inc/wlan_hdd_tdls.h

@@ -206,9 +206,6 @@ int wlan_hdd_cfg80211_configure_tdls_mode(struct wiphy *wiphy,
 QDF_STATUS hdd_tdls_register_peer(void *userdata, uint32_t vdev_id,
 				  const uint8_t *mac, uint8_t qos);
 
-QDF_STATUS hdd_tdls_deregister_peer(void *userdata, uint32_t vdev_id,
-				    struct qdf_mac_addr *peer_mac);
-
 /**
  * hdd_init_tdls_config() - initialize tdls config
  * @tdls_cfg: pointer to tdls_start_params structure
@@ -253,13 +250,6 @@ QDF_STATUS hdd_tdls_register_peer(void *userdata, uint32_t vdev_id,
 	return QDF_STATUS_SUCCESS;
 }
 
-static inline
-QDF_STATUS hdd_tdls_deregister_peer(void *userdata, uint32_t vdev_id,
-				    struct qdf_mac_addr *peer_mac)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
 static inline void hdd_init_tdls_config(struct tdls_start_params *tdls_cfg)
 {
 }

+ 0 - 11
core/hdd/src/wlan_hdd_assoc.c

@@ -4142,17 +4142,6 @@ QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
 	return qdf_status;
 }
 
-QDF_STATUS hdd_roam_deregister_tdlssta(struct hdd_adapter *adapter,
-				       struct qdf_mac_addr *peer_mac)
-{
-	QDF_STATUS qdf_status;
-
-	qdf_status = cdp_clear_peer(cds_get_context(QDF_MODULE_ID_SOC),
-				    OL_TXRX_PDEV_ID, *peer_mac);
-
-	return qdf_status;
-}
-
 #endif
 
 #ifdef WLAN_FEATURE_11W

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

@@ -1516,7 +1516,6 @@ static int hdd_update_tdls_config(struct hdd_context *hdd_ctx)
 	tdls_cfg.tdls_evt_cb_data = psoc;
 	tdls_cfg.tdls_peer_context = hdd_ctx;
 	tdls_cfg.tdls_reg_peer = hdd_tdls_register_peer;
-	tdls_cfg.tdls_dereg_peer = hdd_tdls_deregister_peer;
 	tdls_cfg.tdls_wmm_cb = hdd_wmm_is_acm_allowed;
 	tdls_cfg.tdls_wmm_cb_data = psoc;
 	tdls_cfg.tdls_rx_cb = wlan_cfg80211_tdls_rx_callback;

+ 0 - 20
core/hdd/src/wlan_hdd_tdls.c

@@ -867,26 +867,6 @@ QDF_STATUS hdd_tdls_register_peer(void *userdata, uint32_t vdev_id,
 	return hdd_roam_register_tdlssta(adapter, mac, qos);
 }
 
-QDF_STATUS hdd_tdls_deregister_peer(void *userdata, uint32_t vdev_id,
-				    struct qdf_mac_addr *peer_mac)
-{
-	struct hdd_adapter *adapter;
-	struct hdd_context *hddctx;
-
-	hddctx = userdata;
-	if (!hddctx) {
-		hdd_err("Invalid hddctx");
-		return QDF_STATUS_E_INVAL;
-	}
-	adapter = hdd_get_adapter_by_vdev(hddctx, vdev_id);
-	if (!adapter) {
-		hdd_err("Invalid adapter");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	return hdd_roam_deregister_tdlssta(adapter, peer_mac);
-}
-
 void hdd_init_tdls_config(struct tdls_start_params *tdls_cfg)
 {
 	tdls_cfg->tdls_send_mgmt_req = eWNI_SME_TDLS_SEND_MGMT_REQ;