diff mbox series

[1/2] nl80211: fix OBSS PD min and max offset validation

Message ID 1601278091-20313-1-git-send-email-rmanohar@codeaurora.org (mailing list archive)
State Accepted
Delegated to: Johannes Berg
Headers show
Series [1/2] nl80211: fix OBSS PD min and max offset validation | expand

Commit Message

Rajkumar Manoharan Sept. 28, 2020, 7:28 a.m. UTC
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>
---
 net/wireless/nl80211.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

Comments

Kalle Valo Oct. 9, 2020, 3:30 p.m. UTC | #1
Rajkumar Manoharan <rmanohar@codeaurora.org> writes:

> 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")

Fixes tag should be in one line.
diff mbox series

Patch

diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 666274f36d63..e7b84e36014c 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4871,16 +4871,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;