nl80211: return error for invalid center_freq in 40 MHz
When NL80211_ATTR_WIPHY_CHANNEL_TYPE is given, nl80211 would parse the channel definition the old way, discarding NL80211_ATTR_CENTER_FREQ1, NL80211_ATTR_CENTER_FREQ2 etc. However, it is possible that user space added both NL80211_ATTR_WIPHY_CHANNEL_TYPE and NL80211_ATTR_CENTER_FREQ1 or NL80211_ATTR_CENTER_FREQ2 assuming that all settings would be honored. In such a case, validate that NL80211_ATTR_CENTER_FREQ1 and NL80211_ATTR_CENTER_FREQ2 values match the channel configuration, as otherwise user space would assume that the desired configuration was applied. For example, when trying to start ap with NL80211_ATTR_WIPHY_CHANNEL_TYPE = NL80211_CHAN_HT40MINUS, NL80211_ATTR_WIPHY_FREQ = 5180 and NL80211_ATTR_CENTER_FREQ1 = 5250 without this fix, the ap will start on channel 36 (center_freq1 will be corrected to 5180). With this fix, we will throw an error instead. Signed-off-by: Tova Mussai <tova.mussai@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Родитель
a7f26d8050
Коммит
ffa4629e0c
|
@ -2122,6 +2122,15 @@ static int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
|
|||
case NL80211_CHAN_HT40MINUS:
|
||||
cfg80211_chandef_create(chandef, chandef->chan,
|
||||
chantype);
|
||||
/* user input for center_freq is incorrect */
|
||||
if (info->attrs[NL80211_ATTR_CENTER_FREQ1] &&
|
||||
chandef->center_freq1 != nla_get_u32(
|
||||
info->attrs[NL80211_ATTR_CENTER_FREQ1]))
|
||||
return -EINVAL;
|
||||
/* center_freq2 must be zero */
|
||||
if (info->attrs[NL80211_ATTR_CENTER_FREQ2] &&
|
||||
nla_get_u32(info->attrs[NL80211_ATTR_CENTER_FREQ2]))
|
||||
return -EINVAL;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче