qcacld-3.0: Add boundary check for setMonChan command
qcacld-2.0 to qcacld-3.0 propagation
Add channel and bandwidth validation check for
setMonChan iwpriv command.
Change-Id: I1be22799a46e3ec30cfe384563ecb8a5404d9f6a
CRs-Fixed: 2139911
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 10a334e..d18b6d4 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -5846,6 +5846,32 @@
return -EINVAL;
}
+ /* Validate Channel */
+ if (!WLAN_REG_IS_24GHZ_CH(chan) && !WLAN_REG_IS_5GHZ_CH(chan)) {
+ hdd_err("Channel %d Not supported", chan);
+ return -EINVAL;
+ }
+
+ if (WLAN_REG_IS_24GHZ_CH(chan)) {
+ if (bandwidth == CH_WIDTH_80MHZ) {
+ hdd_err("BW80 not possible in 2.4GHz band");
+ return -EINVAL;
+ }
+ if ((bandwidth != CH_WIDTH_20MHZ) && (chan == 14) &&
+ (bandwidth != CH_WIDTH_MAX)) {
+ hdd_err("Only BW20 possible on channel 14");
+ return -EINVAL;
+ }
+ }
+
+ if (WLAN_REG_IS_5GHZ_CH(chan)) {
+ if ((bandwidth != CH_WIDTH_20MHZ) && (chan == 165) &&
+ (bandwidth != CH_WIDTH_MAX)) {
+ hdd_err("Only BW20 possible on channel 165");
+ return -EINVAL;
+ }
+ }
+
hdd_debug("Set monitor mode Channel %d", chan);
qdf_mem_zero(&roam_profile, sizeof(roam_profile));
roam_profile.ChannelInfo.ChannelList = &ch_info->channel;