summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHanumanth Reddy Pothula <c_hpothu@codeaurora.org>2016-11-25 17:13:11 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-11-29 23:05:38 -0800
commitd83167190384539393eaa46eed18cf60d277a33b (patch)
treea5621841b4f4f2c07b841d9b84c8b9e6b0e2fb72
parentb3d798d690903f358be81574b796d0ce6e193456 (diff)
qcacld-2.0: Don't process set multicast address list on ini disabled
Presently, Host processing set MC request though ini is disabled and also as MC address list is not initialized observed a dog bark while processing MC request with invalid data(MC address list count) Don't process set MC address list if MC address list ini is disabled. Also, initialize MC address list, during driver initialization. Change-Id: Ic199c3ca73526a74d19c1342267979e313b8ba02 CRs-Fixed: 1092414
-rw-r--r--CORE/HDD/inc/wlan_hdd_wext.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c3
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c12
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c18
4 files changed, 23 insertions, 12 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h
index c4b54031ac3c..67b90725fe47 100644
--- a/CORE/HDD/inc/wlan_hdd_wext.h
+++ b/CORE/HDD/inc/wlan_hdd_wext.h
@@ -460,7 +460,7 @@ VOS_STATUS iw_set_tdls_params(struct net_device *dev, struct iw_request_info *in
#endif
#ifdef WLAN_FEATURE_PACKET_FILTERING
-void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set);
+int wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set);
#endif
void* wlan_hdd_change_country_code_callback(void *pAdapter);
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index c2a22e101870..939633940253 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -4057,7 +4057,8 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
/* Call to clear any MC Addr List filter applied after
* successful connection.
*/
- wlan_hdd_set_mc_addr_list(pAdapter, FALSE);
+ if (wlan_hdd_set_mc_addr_list(pAdapter, FALSE))
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("failed to clear mc addr list"));
#endif
}
break;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 51982058447b..f337788285f4 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10009,7 +10009,11 @@ static void __hdd_set_multicast_list(struct net_device *dev)
/* Delete already configured multicast address list */
if (0 < pAdapter->mc_addr_list.mc_cnt)
- wlan_hdd_set_mc_addr_list(pAdapter, false);
+ if (wlan_hdd_set_mc_addr_list(pAdapter, false)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("failed to clear mc addr list"));
+ return;
+ }
+
if (dev->flags & IFF_ALLMULTI)
{
@@ -10066,7 +10070,8 @@ static void __hdd_set_multicast_list(struct net_device *dev)
}
/* Configure the updated multicast address list */
- wlan_hdd_set_mc_addr_list(pAdapter, true);
+ if (wlan_hdd_set_mc_addr_list(pAdapter, true))
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("failed to set mc addr list"));
EXIT();
return;
@@ -18463,6 +18468,9 @@ int hdd_init_packet_filtering(hdd_context_t *hdd_ctx,
return -ENOMEM;
}
+ vos_mem_zero(adapter->mc_addr_list.addr,
+ (hdd_ctx->max_mc_addr_list * ETH_ALEN));
+
return 0;
}
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 5f3c325cc810..0549c3c2f70a 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -9944,11 +9944,12 @@ int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType,
* @pAdapter: Adapter context
* @set: flag to notify set/clear action on the multicast addr
*
- * Returns: None
+ * Returns: 0 on success, errno on failure
*/
-void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
+int wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
{
v_U8_t i;
+ int ret = 0;
tpSirRcvFltMcAddrList pMulticastAddrs = NULL;
tHalHandle hHal;
hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx;
@@ -9956,26 +9957,26 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
ENTER();
- if (wlan_hdd_validate_context(pHddCtx))
- return;
+ if ((ret = wlan_hdd_validate_context(pHddCtx)))
+ return ret;
hHal = pHddCtx->hHal;
if (NULL == hHal) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("HAL Handle is NULL"));
- return;
+ return -EINVAL;
}
if (!sta_ctx) {
hddLog(LOGE, "sta_ctx is NULL");
- return;
+ return -EINVAL;
}
if (pHddCtx->cfg_ini->fEnableMCAddrList) {
pMulticastAddrs = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList));
if (NULL == pMulticastAddrs) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Could not allocate Memory"));
- return;
+ return -ENOMEM;
}
vos_mem_zero(pMulticastAddrs, sizeof(tSirRcvFltMcAddrList));
pMulticastAddrs->action = set;
@@ -10048,10 +10049,11 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
} else {
hddLog(VOS_TRACE_LEVEL_INFO,
FL("gMCAddrListEnable is not enabled in INI"));
+ return -EINVAL;
}
EXIT();
- return;
+ return ret;
}
static int __iw_set_packet_filter_params(struct net_device *dev,