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;