summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Gynther <pgynther@google.com>2019-02-07 18:08:44 -0800
committerPetri Gynther <pgynther@google.com>2019-02-07 18:09:05 -0800
commitfeb49e2c479ac26259ecc36a0bfeade1d7cfe4e5 (patch)
treec256fc6c3e08f251d0b137587ecdc7661ce1ecb0
parentb167f9a6f268385e07148b09f36314595f70457f (diff)
parent3ff74583dc8d590538079f87abbcb68039d8bf54 (diff)
downloadqcacld-android-msm-crosshatch-4.9-q-preview-1.tar.gz
Merge -pi-qpr3 into android-msm-bluecross-4.9android-q-preview-1_r0.3android-msm-crosshatch-4.9-q-preview-1
Change-Id: I236c48059549cc39aedca6d1ac01c6045133a0de Signed-off-by: Petri Gynther <pgynther@google.com>
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index e7a40552fb..03df15028f 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -9264,6 +9264,7 @@ __wlan_hdd_cfg80211_avoid_freq(struct wiphy *wiphy,
uint16_t unsafe_channel_index, local_unsafe_list_count;
tHddAvoidFreqList *channel_list;
enum tQDF_GLOBAL_CON_MODE curr_mode;
+ uint8_t num_args = 0;
ENTER_DEV(wdev->netdev);
@@ -9281,11 +9282,27 @@ __wlan_hdd_cfg80211_avoid_freq(struct wiphy *wiphy,
ret = wlan_hdd_validate_context(hdd_ctx);
if (0 != ret)
return ret;
+ if (!data || data_len < (sizeof(channel_list->avoidFreqRangeCount) +
+ sizeof(tHddAvoidFreqRange))) {
+ hdd_err("Avoid frequency channel list empty");
+ return -EINVAL;
+ }
+ num_args = (data_len - sizeof(channel_list->avoidFreqRangeCount)) /
+ sizeof(channel_list->avoidFreqRange[0].startFreq);
+
+ if (num_args < 2 || num_args > HDD_MAX_AVOID_FREQ_RANGES * 2 ||
+ num_args % 2 != 0) {
+ hdd_err("Invalid avoid frequency channel list");
+ return -EINVAL;
+ }
channel_list = (tHddAvoidFreqList *)data;
- if (!channel_list) {
- hdd_log(QDF_TRACE_LEVEL_ERROR,
- "Avoid frequency channel list empty");
+
+ if (channel_list->avoidFreqRangeCount == 0 ||
+ channel_list->avoidFreqRangeCount > HDD_MAX_AVOID_FREQ_RANGES ||
+ 2 * channel_list->avoidFreqRangeCount != num_args) {
+ hdd_err("Invalid frequency range count %d",
+ channel_list->avoidFreqRangeCount);
return -EINVAL;
}