Преглед изворни кода

qcacld-3.0: Acquire mutex before accessing tdls context

peer_list is a parameter for tdls_ctx, so every access to
peer_list should be protected with mutex lock.

This change refactors the code for function hdd_roam_tdls
_status_update_handler().

Change-Id: Id4fd0931df5ec38ad07657751feff34946a18c02
CRs-Fixed: 1106735
Nitesh Shah пре 8 година
родитељ
комит
3dea6721dc
1 измењених фајлова са 7 додато и 3 уклоњено
  1. 7 3
      core/hdd/src/wlan_hdd_assoc.c

+ 7 - 3
core/hdd/src/wlan_hdd_assoc.c

@@ -3806,17 +3806,18 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
 			    pHddCtx->tdlsConnInfo[staIdx].staId) {
 				hdd_warn("HDD: del STA IDX = %x",
 					 pRoamInfo->staId);
-
+				mutex_lock(&pHddCtx->tdls_lock);
 				curr_peer =
 					wlan_hdd_tdls_find_peer(pAdapter,
 								pRoamInfo->
 								peerMac.bytes,
-								true);
+								false);
 				if (NULL != curr_peer) {
 				    hdd_info("Current status for peer " MAC_ADDRESS_STR " is %d",
 				    MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes),
 					    curr_peer->link_status);
 				    if (TDLS_IS_CONNECTED(curr_peer)) {
+					mutex_unlock(&pHddCtx->tdls_lock);
 					hdd_roam_deregister_tdlssta
 						(pAdapter,
 						pRoamInfo->staId);
@@ -3824,11 +3825,14 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
 						(pAdapter);
 				    } else if (eTDLS_LINK_CONNECTING ==
 					    curr_peer->link_status) {
+					mutex_unlock(&pHddCtx->tdls_lock);
 					hdd_roam_deregister_tdlssta
 						(pAdapter,
 						pRoamInfo->staId);
 				    }
-				}
+				} else
+				    mutex_unlock(&pHddCtx->tdls_lock);
+
 				wlan_hdd_tdls_reset_peer(pAdapter,
 							 pRoamInfo->
 							 peerMac.bytes);