diff options
| author | c_hpothu <c_hpothu@codeaurora.org> | 2016-08-18 12:10:36 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-02 18:26:29 -0700 |
| commit | d50092418552bcd1d7b4bf7cb59867332b0b2d29 (patch) | |
| tree | 045970eee589918e3d4800160cf39be55cc5adda | |
| parent | 3e26de62cf8ac67f71e54312793d5ab8d8adad34 (diff) | |
qcacld-3.0: Validate adapter's magic number in timer handlers
qcacld-2.0 to qcacld-3.0 propagation
Before accessing adapter context, validate adapter's magic number
along with NULL check to confirm that instance of adapter context
is valid.
Change-Id: If0365c765ad87be53b7e78d8744f0dcfe1a310ab
CRs-Fixed: 803527
| -rw-r--r-- | core/hdd/src/wlan_hdd_hostapd.c | 4 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_p2p.c | 5 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_tdls.c | 30 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_wmm.c | 6 |
4 files changed, 37 insertions, 8 deletions
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 7ec8c055a5fb..bc5496fd81f6 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -503,6 +503,10 @@ void hdd_hostapd_inactivity_timer_cb(void *usrDataForCallback) was down only then we bring down AP */ pHostapdAdapter = netdev_priv(dev); + if (WLAN_HDD_ADAPTER_MAGIC != pHostapdAdapter->magic) { + hdd_err("invalid adapter: %p", pHostapdAdapter); + return; + } pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); qdf_status = qdf_mc_timer_start(&pHddApCtx->hdd_ap_inactivity_timer, diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 16f3953b177d..47e5956c4ef7 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -496,8 +496,9 @@ void wlan_hdd_remain_on_chan_timeout(void *data) hdd_remain_on_chan_ctx_t *pRemainChanCtx; hdd_cfg80211_state_t *cfgState; - if (NULL == pAdapter) { - hddLog(LOGE, "%s: pAdapter is NULL !!!", __func__); + if ((NULL == pAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + hdd_err("pAdapter is invalid %p !!!", pAdapter); return; } diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 0ce39694c4f1..53cb64c29cf3 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -345,8 +345,17 @@ static uint32_t wlan_hdd_tdls_discovery_sent_cnt(hdd_context_t *pHddCtx) */ static void wlan_hdd_tdls_check_power_save_prohibited(hdd_adapter_t *pAdapter) { - tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tdlsCtx_t *pHddTdlsCtx; + hdd_context_t *pHddCtx; + + if ((NULL == pAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + hdd_err("invalid pAdapter: %p", pAdapter); + return; + } + + pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); if ((NULL == pHddTdlsCtx) || (NULL == pHddCtx)) { QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, @@ -2221,7 +2230,14 @@ static int32_t wlan_hdd_tdls_peer_reset_discovery_processed(tdlsCtx_t * */ uint16_t wlan_hdd_tdls_connected_peers(hdd_adapter_t *pAdapter) { - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_context_t *pHddCtx; + + if ((NULL == pAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + hdd_err("invalid pAdapter: %p", pAdapter); + return 0; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); if (wlan_hdd_validate_context(pHddCtx)) return 0; @@ -3022,9 +3038,11 @@ void wlan_hdd_tdls_timer_restart(hdd_adapter_t *pAdapter, void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer, uint16_t reason) { - if (NULL == pAdapter || NULL == curr_peer) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - FL("parameters passed are invalid")); + if ((NULL == pAdapter || WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) || + (NULL == curr_peer)) { + hdd_err("parameters passed are invalid"); + if (!curr_peer) + hdd_err("curr_peer is NULL"); return; } diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c index dd6baba0ac99..f7beedff0de7 100644 --- a/core/hdd/src/wlan_hdd_wmm.c +++ b/core/hdd/src/wlan_hdd_wmm.c @@ -348,6 +348,12 @@ static void hdd_wmm_inactivity_timer_cb(void *user_data) sme_ac_enum_type acType = pQosContext->acType; pAdapter = pQosContext->pAdapter; + if ((NULL == pAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + hdd_err("invalid pAdapter: %p", pAdapter); + return; + } + pAc = &pAdapter->hddWmmStatus.wmmAcStatus[acType]; /* Get the Tx stats for this AC. */ |
