diff options
| author | Mukul Sharma <mukul@codeaurora.org> | 2016-08-30 15:54:11 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-14 23:37:04 -0700 |
| commit | afa16b8110a96587e1b34022927c129232eeea95 (patch) | |
| tree | 045959315706f299ea706a82561f3868072ef312 | |
| parent | d4c38d98ff610e0106d43ef91b1c6516b1cacd02 (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.h | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 10 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 8 |
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; } |
