diff options
| author | Hanumantha Reddy Pothula <c_hpothu@qti.qualcomm.com> | 2015-06-24 16:34:25 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-06-29 07:23:18 -0700 |
| commit | 0102bbb2a4dbe1ccd9ab25d3c04d3d91c554670b (patch) | |
| tree | ca5912ddaa932840bc99d8be5e33672c823657fc | |
| parent | 05f132b6cd834b3785d973ad674957771e9edc90 (diff) | |
qcacld-2.0: wlan: Validate adapter's magic number in timer handlers
This is prima to qcacld-2.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_dev_pwr.c | 6 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 6 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 12 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_p2p.c | 5 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tdls.c | 40 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wmm.c | 5 |
6 files changed, 54 insertions, 20 deletions
diff --git a/CORE/HDD/src/wlan_hdd_dev_pwr.c b/CORE/HDD/src/wlan_hdd_dev_pwr.c index cfd4d1c91947..f30edac4607b 100644 --- a/CORE/HDD/src/wlan_hdd_dev_pwr.c +++ b/CORE/HDD/src/wlan_hdd_dev_pwr.c @@ -115,10 +115,10 @@ void hddDevTmTxBlockTimeoutHandler(void *usrData) staAdapater = hdd_get_adapter(pHddCtx, WLAN_HDD_INFRA_STATION); - if(NULL == staAdapater) - { + if ((NULL == staAdapater) || + (WLAN_HDD_ADAPTER_MAGIC != staAdapater->magic)) { VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_ERROR, - "%s: NULL Adapter", __func__); + FL("invalid Adapter %p"), staAdapater); VOS_ASSERT(0); return; } diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index c11483b06f3c..b3abe719dc62 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -730,6 +730,12 @@ void hdd_hostapd_inactivity_timer_cb(v_PVOID_t usrDataForCallback) was down only then we bring down AP */ pHostapdAdapter = netdev_priv(dev); + if ((NULL == pHostapdAdapter) || + (WLAN_HDD_ADAPTER_MAGIC != pHostapdAdapter->magic)) + { + hddLog(LOGE, FL("invalid adapter: %p"), pHostapdAdapter); + return; + } pHddApCtx = WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter); vos_status = vos_timer_start( &pHddApCtx->hdd_ap_inactivity_timer, diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index a37c894e3619..b05d81809e67 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -12996,11 +12996,15 @@ static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx) /* Iterate over all adapters/devices */ status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); + if ((NULL == pAdapterNode) || (VOS_STATUS_SUCCESS != status)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("fail to get adapter: %p %d"), pAdapterNode, status); + goto end; + } do { - if ((status == VOS_STATUS_SUCCESS) && - pAdapterNode && - pAdapterNode->pAdapter) { + if(pAdapterNode->pAdapter && + WLAN_HDD_ADAPTER_MAGIC == pAdapterNode->pAdapter->magic) { hddLog(LOGP, "restarting the driver(intf:\'%s\' mode:%s(%d) :try %d)", pAdapterNode->pAdapter->dev->name, @@ -13030,7 +13034,7 @@ static VOS_STATUS wlan_hdd_framework_restart(hdd_context_t *pHddCtx) pAdapterNode = pNext; } while((NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status)); - + end: /* Free the allocated management frame */ kfree(mgmt); diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index 09c4909cd001..9923bfaccf88 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -441,9 +441,8 @@ 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)) { + hddLog(LOGE, FL("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 3ce8ec1ed6d6..7784c2b7c3d7 100644 --- a/CORE/HDD/src/wlan_hdd_tdls.c +++ b/CORE/HDD/src/wlan_hdd_tdls.c @@ -268,7 +268,6 @@ static v_VOID_t wlan_hdd_tdls_discover_peer_cb( v_PVOID_t userData ) struct list_head *head; struct list_head *pos; hddTdlsPeer_t *curr_peer; - hdd_station_ctx_t *pHddStaCtx; hdd_context_t *pHddCtx; tdlsCtx_t *pHddTdlsCtx = (tdlsCtx_t *)userData; int discover_req_sent = 0; @@ -298,8 +297,6 @@ static v_VOID_t wlan_hdd_tdls_discover_peer_cb( v_PVOID_t userData ) mutex_lock(&pHddCtx->tdls_lock); - pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: ", __func__); if (0 == pHddTdlsCtx->discovery_peer_cnt) @@ -417,9 +414,17 @@ static tANI_U32 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 = NULL; + hdd_context_t *pHddCtx = NULL; + + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("invalid pAdapter: %p"), pAdapter); + return; + } + pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); if ((NULL == pHddTdlsCtx) || (NULL == pHddCtx)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -2056,7 +2061,14 @@ int wlan_hdd_tdls_reset_peer(hdd_adapter_t *pAdapter, const u8 *mac) tANI_U16 wlan_hdd_tdlsConnectedPeers(hdd_adapter_t *pAdapter) { - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + hdd_context_t *pHddCtx = NULL; + + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("invalid pAdapter: %p"), pAdapter); + return 0; + } + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); if (0 != (wlan_hdd_validate_context(pHddCtx))) { @@ -2247,10 +2259,18 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) void wlan_hdd_tdls_check_bmps(hdd_adapter_t *pAdapter) { - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + tdlsCtx_t *pHddTdlsCtx = NULL; + hdd_context_t *pHddCtx = NULL; hddTdlsPeer_t *curr_peer; + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("invalid pAdapter: %p"), pAdapter); + return; + } + pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx)) { //getting over logged, so moving log-level to INFO. @@ -2832,8 +2852,8 @@ void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer, tANI_U16 reason) { - if (NULL == pAdapter || NULL == curr_peer) - { + if ((NULL == pAdapter || WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) || + (NULL == curr_peer)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, FL("parameters passed are invalid")); return; diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c index 4adcf7c56b36..6400cf9d7bb5 100644 --- a/CORE/HDD/src/wlan_hdd_wmm.c +++ b/CORE/HDD/src/wlan_hdd_wmm.c @@ -404,6 +404,11 @@ void hdd_wmm_inactivity_timer_cb( v_PVOID_t pUserData ) WLANTL_ACEnumType acType = pQosContext->acType; pAdapter = pQosContext->pAdapter; + if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("invalid pAdapter: %p"), pAdapter); + return; + } pAc = &pAdapter->hddWmmStatus.wmmAcStatus[acType]; // Get the Tx stats for this AC. |
