diff options
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r-- | net/wireless/nl80211.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index c7bbe5f0aae8..4eece06be1e7 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -6231,7 +6231,7 @@ do { \ | |||
6231 | nl80211_check_s32); | 6231 | nl80211_check_s32); |
6232 | /* | 6232 | /* |
6233 | * Check HT operation mode based on | 6233 | * Check HT operation mode based on |
6234 | * IEEE 802.11 2012 8.4.2.59 HT Operation element. | 6234 | * IEEE 802.11-2016 9.4.2.57 HT Operation element. |
6235 | */ | 6235 | */ |
6236 | if (tb[NL80211_MESHCONF_HT_OPMODE]) { | 6236 | if (tb[NL80211_MESHCONF_HT_OPMODE]) { |
6237 | ht_opmode = nla_get_u16(tb[NL80211_MESHCONF_HT_OPMODE]); | 6237 | ht_opmode = nla_get_u16(tb[NL80211_MESHCONF_HT_OPMODE]); |
@@ -6241,22 +6241,9 @@ do { \ | |||
6241 | IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)) | 6241 | IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)) |
6242 | return -EINVAL; | 6242 | return -EINVAL; |
6243 | 6243 | ||
6244 | if ((ht_opmode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) && | 6244 | /* NON_HT_STA bit is reserved, but some programs set it */ |
6245 | (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)) | 6245 | ht_opmode &= ~IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT; |
6246 | return -EINVAL; | ||
6247 | 6246 | ||
6248 | switch (ht_opmode & IEEE80211_HT_OP_MODE_PROTECTION) { | ||
6249 | case IEEE80211_HT_OP_MODE_PROTECTION_NONE: | ||
6250 | case IEEE80211_HT_OP_MODE_PROTECTION_20MHZ: | ||
6251 | if (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT) | ||
6252 | return -EINVAL; | ||
6253 | break; | ||
6254 | case IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER: | ||
6255 | case IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED: | ||
6256 | if (!(ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)) | ||
6257 | return -EINVAL; | ||
6258 | break; | ||
6259 | } | ||
6260 | cfg->ht_opmode = ht_opmode; | 6247 | cfg->ht_opmode = ht_opmode; |
6261 | mask |= (1 << (NL80211_MESHCONF_HT_OPMODE - 1)); | 6248 | mask |= (1 << (NL80211_MESHCONF_HT_OPMODE - 1)); |
6262 | } | 6249 | } |
@@ -10962,9 +10949,12 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) | |||
10962 | rem) { | 10949 | rem) { |
10963 | u8 *mask_pat; | 10950 | u8 *mask_pat; |
10964 | 10951 | ||
10965 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, | 10952 | err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, |
10966 | nl80211_packet_pattern_policy, | 10953 | nl80211_packet_pattern_policy, |
10967 | info->extack); | 10954 | info->extack); |
10955 | if (err) | ||
10956 | goto error; | ||
10957 | |||
10968 | err = -EINVAL; | 10958 | err = -EINVAL; |
10969 | if (!pat_tb[NL80211_PKTPAT_MASK] || | 10959 | if (!pat_tb[NL80211_PKTPAT_MASK] || |
10970 | !pat_tb[NL80211_PKTPAT_PATTERN]) | 10960 | !pat_tb[NL80211_PKTPAT_PATTERN]) |
@@ -11213,8 +11203,11 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, | |||
11213 | rem) { | 11203 | rem) { |
11214 | u8 *mask_pat; | 11204 | u8 *mask_pat; |
11215 | 11205 | ||
11216 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, | 11206 | err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, |
11217 | nl80211_packet_pattern_policy, NULL); | 11207 | nl80211_packet_pattern_policy, NULL); |
11208 | if (err) | ||
11209 | return err; | ||
11210 | |||
11218 | if (!pat_tb[NL80211_PKTPAT_MASK] || | 11211 | if (!pat_tb[NL80211_PKTPAT_MASK] || |
11219 | !pat_tb[NL80211_PKTPAT_PATTERN]) | 11212 | !pat_tb[NL80211_PKTPAT_PATTERN]) |
11220 | return -EINVAL; | 11213 | return -EINVAL; |