summaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c35
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;