summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHanumantha Reddy Pothula <c_hpothu@qti.qualcomm.com>2015-06-24 16:34:25 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-06-29 07:23:18 -0700
commit0102bbb2a4dbe1ccd9ab25d3c04d3d91c554670b (patch)
treeca5912ddaa932840bc99d8be5e33672c823657fc
parent05f132b6cd834b3785d973ad674957771e9edc90 (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.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c6
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c12
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c5
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c40
-rw-r--r--CORE/HDD/src/wlan_hdd_wmm.c5
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.