Skip to content

Commit

Permalink
nl80211: fix OBSS PD min and max offset validation
Browse files Browse the repository at this point in the history
[ Upstream commit 6c8b6e4 ]

The SRG min and max offset won't present when SRG Information Present of
SR control field of Spatial Reuse Parameter Set element set to 0. Per
spec. IEEE802.11ax D7.0, SRG OBSS PD Min Offset ≤ SRG OBSS PD Max
Offset. Hence fix the constrain check to allow same values in both
offset and also call appropriate nla_get function to read the values.

Fixes: 796e90f ("cfg80211: add support for parsing OBBS_PD attributes")
Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org>
Link: https://lore.kernel.org/r/1601278091-20313-1-git-send-email-rmanohar@codeaurora.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Rajkumar Manoharan authored and gregkh committed Oct 29, 2020
1 parent b6ca9ea commit f5758f1
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -4683,16 +4683,14 @@ static int nl80211_parse_he_obss_pd(struct nlattr *attrs,
if (err)
return err;

if (!tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET] ||
!tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET])
return -EINVAL;

he_obss_pd->min_offset =
nla_get_u32(tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET]);
he_obss_pd->max_offset =
nla_get_u32(tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET]);

if (he_obss_pd->min_offset >= he_obss_pd->max_offset)
if (tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET])
he_obss_pd->min_offset =
nla_get_u8(tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET]);
if (tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET])
he_obss_pd->max_offset =
nla_get_u8(tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET]);

if (he_obss_pd->min_offset > he_obss_pd->max_offset)
return -EINVAL;

he_obss_pd->enable = true;
Expand Down

0 comments on commit f5758f1

Please sign in to comment.