summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMukul Sharma <mukul@codeaurora.org>2016-08-30 15:54:11 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-09-14 23:37:04 -0700
commitafa16b8110a96587e1b34022927c129232eeea95 (patch)
tree045959315706f299ea706a82561f3868072ef312
parentd4c38d98ff610e0106d43ef91b1c6516b1cacd02 (diff)
qcacld-2.0: Validate multicast filter count
Before configuring to firmware, validate multicast filter count does not exceed the max allowed value Change-Id: I1bcb1c820a5154109565a8c283bf5131a3b90855 CRs-Fixed: 1059974
-rw-r--r--CORE/HDD/inc/wlan_hdd_packet_filtering.h4
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c10
-rw-r--r--CORE/MAC/inc/sirApi.h2
-rw-r--r--CORE/SERVICES/WMA/wma.c8
4 files changed, 17 insertions, 7 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_packet_filtering.h b/CORE/HDD/inc/wlan_hdd_packet_filtering.h
index ad7f76587e81..56569477726f 100644
--- a/CORE/HDD/inc/wlan_hdd_packet_filtering.h
+++ b/CORE/HDD/inc/wlan_hdd_packet_filtering.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -54,7 +54,7 @@
#define HDD_IPV6_CMP_DATA_1 0xDD
#define HDD_WLAN_MAC_ADDR_LEN 6
-#define HDD_MAX_NUM_MULTICAST_ADDRESS 10
+#define HDD_MAX_NUM_MULTICAST_ADDRESS 16
typedef enum
{
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index f6bd740df32e..d869e540b644 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -9985,10 +9985,16 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
hdd_connIsConnected(sta_ctx)) ||
(WLAN_HDD_IS_NDI(pAdapter) &&
WLAN_HDD_IS_NDI_CONNECTED(pAdapter)))) {
-
+ if (pAdapter->mc_addr_list.mc_cnt >
+ HDD_MAX_NUM_MULTICAST_ADDRESS) {
+ hddLog(LOGE, FL("mc_cnt: %u max: %u"),
+ pAdapter->mc_addr_list.mc_cnt,
+ HDD_MAX_NUM_MULTICAST_ADDRESS);
+ pAdapter->mc_addr_list.mc_cnt =
+ HDD_MAX_NUM_MULTICAST_ADDRESS;
+ }
pMulticastAddrs->ulMulticastAddrCnt =
pAdapter->mc_addr_list.mc_cnt;
-
for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) {
memcpy(pMulticastAddrs->multicastAddr[i],
&pAdapter->mc_addr_list.addr[i * ETH_ALEN],
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index a77b5fc55874..0865d17ad680 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4040,7 +4040,7 @@ typedef struct sSirTxPerTrackingParam
#define SIR_IPV4_ADDR_LEN 4
#define SIR_MAC_ADDR_LEN 6
#define SIR_MAX_FILTER_TEST_DATA_LEN 8
-#define SIR_MAX_NUM_MULTICAST_ADDRESS 240
+#define SIR_MAX_NUM_MULTICAST_ADDRESS 16
#define SIR_MAX_NUM_FILTERS 20
#define SIR_MAX_NUM_TESTS_PER_FILTER 10
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 9be67e2be2b2..374615bfc9d9 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -24609,8 +24609,12 @@ static VOS_STATUS wma_process_mcbc_set_filter_req(tp_wma_handle wma_handle,
uint8_t vdev_id = 0;
int i;
- if(mcbc_param->ulMulticastAddrCnt <= 0) {
- WMA_LOGW("Number of multicast addresses is 0");
+ if (mcbc_param->ulMulticastAddrCnt <= 0 ||
+ mcbc_param->ulMulticastAddrCnt >
+ CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES) {
+ WMA_LOGE("Number of multicast addresses: %u",
+ mcbc_param->ulMulticastAddrCnt);
+ WARN_ON(1);
return VOS_STATUS_E_FAILURE;
}