Jelajahi Sumber

qcacld-3.0: Fix crash in wlan_hdd_tdls_check_power_save_prohibited

qcacld-2.0 to qcacld-3.0 propagation

Due to pre-emption there could be probability that tdls context
is accessed in wlan_hdd_tdls_check_power_save_prohibited after it's
released. This will result in kernel panic.

Protect tdls context with mutex lock before accessing

Change-Id: I33369320de5b0aadae661d7d27fbc5ba18e9e409
CRs-Fixed: 990645
Selvaraj, Sridhar 8 tahun lalu
induk
melakukan
b5cce8783e
1 mengubah file dengan 6 tambahan dan 8 penghapusan
  1. 6 8
      core/hdd/src/wlan_hdd_tdls.c

+ 6 - 8
core/hdd/src/wlan_hdd_tdls.c

@@ -2456,19 +2456,17 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter)
  */
 void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter)
 {
-	tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
-	hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
-
-	if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) {
-		QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR,
-			  FL("pHddCtx or pHddTdlsCtx points to NULL"));
-		return;
-	}
+	tdlsCtx_t *pHddTdlsCtx;
+	hdd_context_t *pHddCtx;
 
 	hddLog(LOG1, "%s", __func__);
 
+	pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+	if (0 != wlan_hdd_validate_context(pHddCtx))
+		return;
 	mutex_lock(&pHddCtx->tdls_lock);
 
+	pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
 	if (NULL == pHddTdlsCtx) {
 		mutex_unlock(&pHddCtx->tdls_lock);
 		QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR,