Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffa4629e authored by Tova Mussai's avatar Tova Mussai Committed by Johannes Berg
Browse files

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: default avatarTova Mussai <tova.mussai@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent a7f26d80
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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;