From b5cce8783ee5065fd28b3632f3094c3ee86970ae Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Sun, 31 Jul 2016 14:58:59 +0530 Subject: [PATCH] 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 --- core/hdd/src/wlan_hdd_tdls.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index a96d9c5079e2..9c7d52e73ced 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/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,