]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
nl80211: fix OBSS PD min and max offset validation
authorRajkumar Manoharan <rmanohar@codeaurora.org>
Mon, 28 Sep 2020 07:28:10 +0000 (00:28 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 Oct 2020 09:07:45 +0000 (10:07 +0100)
[ Upstream commit 6c8b6e4a5f745ec49286ac0a3f1d591a34818f82 ]

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: 796e90f42b7e ("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>
net/wireless/nl80211.c

index 4d7b255067225fe5d3e01f76f2272091409e581b..7cbb94b4d49177d3e0d39cf63c65018f7c34608f 100644 (file)
@@ -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;