diff options
| author | Nitesh Shah <niteshs@codeaurora.org> | 2017-01-31 16:58:18 +0530 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-03-03 16:34:57 -0800 |
| commit | d2c6d01bf764cc1937120d39cfe1eb542fc1c3f1 (patch) | |
| tree | 5e83c7d813d59d8a985ad0d96fe49ac033fb0096 | |
| parent | a00e08accafebf3d0606d7f06df1a1950e388672 (diff) | |
qcacld-3.0: Acquire mutex before accessing tdls function
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
wlan_hdd_tdls_discovery_timeout_peer_cb() and
wlan_hdd_tdls_scan_callback().
Change-Id: I6927aee62c726edd1944d3b6638ae68d9c91d6ab
CRs-Fixed: 1106235
| -rw-r--r-- | core/hdd/src/wlan_hdd_tdls.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 8d7fb445d79a..3c4ef161ce28 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -396,9 +396,21 @@ static void wlan_hdd_tdls_discovery_timeout_peer_cb(void *userData) struct list_head *pos, *q; tdlsCtx_t *pHddTdlsCtx; hdd_context_t *pHddCtx; + v_CONTEXT_t cds_context; ENTER(); + cds_context = cds_get_global_context(); + if (NULL == cds_context) { + hdd_err("cds_context points to NULL"); + return; + } + + pHddCtx = cds_get_context(QDF_MODULE_ID_HDD); + if (0 != (wlan_hdd_validate_context(pHddCtx))) + return; + + mutex_lock(&pHddCtx->tdls_lock); pHddTdlsCtx = (tdlsCtx_t *) userData; if ((NULL == pHddTdlsCtx) || (NULL == pHddTdlsCtx->pAdapter)) { @@ -412,25 +424,17 @@ static void wlan_hdd_tdls_discovery_timeout_peer_cb(void *userData) return; } - pHddCtx = WLAN_HDD_GET_CTX(pHddTdlsCtx->pAdapter); - if (0 != (wlan_hdd_validate_context(pHddCtx))) - return; - - mutex_lock(&pHddCtx->tdls_lock); - for (i = 0; i < TDLS_PEER_LIST_SIZE; i++) { head = &pHddTdlsCtx->peer_list[i]; list_for_each_safe(pos, q, head) { tmp = list_entry(pos, hddTdlsPeer_t, node); if (eTDLS_LINK_DISCOVERING == tmp->link_status) { - mutex_unlock(&pHddCtx->tdls_lock); hdd_notice(MAC_ADDRESS_STR " to idle state", MAC_ADDR_ARRAY(tmp->peerMac)); wlan_hdd_tdls_set_peer_link_status(tmp, eTDLS_LINK_IDLE, eTDLS_LINK_NOT_SUPPORTED, - true); - mutex_lock(&pHddCtx->tdls_lock); + false); } } } @@ -2877,7 +2881,8 @@ int wlan_hdd_tdls_scan_callback(hdd_adapter_t *pAdapter, struct wiphy *wiphy, if (eTDLS_SUPPORT_NOT_ENABLED == pHddCtx->tdls_mode) return 1; - curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, true); + mutex_lock(&pHddCtx->tdls_lock); + curr_peer = wlan_hdd_tdls_is_progress(pHddCtx, NULL, 0, false); if (NULL != curr_peer) { if (pHddCtx->tdls_scan_ctxt.reject++ >= TDLS_MAX_SCAN_REJECT) { pHddCtx->tdls_scan_ctxt.reject = 0; @@ -2889,13 +2894,16 @@ int wlan_hdd_tdls_scan_callback(hdd_adapter_t *pAdapter, struct wiphy *wiphy, wlan_hdd_tdls_set_peer_link_status(curr_peer, eTDLS_LINK_IDLE, eTDLS_LINK_UNSPECIFIED, - true); + false); + mutex_unlock(&pHddCtx->tdls_lock); return 1; } + mutex_unlock(&pHddCtx->tdls_lock); hdd_warn("tdls in progress. scan rejected %d", pHddCtx->tdls_scan_ctxt.reject); return -EBUSY; } + mutex_unlock(&pHddCtx->tdls_lock); /* tdls teardown is ongoing */ if (eTDLS_SUPPORT_DISABLED == pHddCtx->tdls_mode) { |
