|
@@ -6231,7 +6231,7 @@ do { \
|
|
|
nl80211_check_s32);
|
|
|
/*
|
|
|
* Check HT operation mode based on
|
|
|
- * IEEE 802.11 2012 8.4.2.59 HT Operation element.
|
|
|
+ * IEEE 802.11-2016 9.4.2.57 HT Operation element.
|
|
|
*/
|
|
|
if (tb[NL80211_MESHCONF_HT_OPMODE]) {
|
|
|
ht_opmode = nla_get_u16(tb[NL80211_MESHCONF_HT_OPMODE]);
|
|
@@ -6241,22 +6241,9 @@ do { \
|
|
|
IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if ((ht_opmode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) &&
|
|
|
- (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))
|
|
|
- return -EINVAL;
|
|
|
+ /* NON_HT_STA bit is reserved, but some programs set it */
|
|
|
+ ht_opmode &= ~IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
|
|
|
|
|
|
- switch (ht_opmode & IEEE80211_HT_OP_MODE_PROTECTION) {
|
|
|
- case IEEE80211_HT_OP_MODE_PROTECTION_NONE:
|
|
|
- case IEEE80211_HT_OP_MODE_PROTECTION_20MHZ:
|
|
|
- if (ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT)
|
|
|
- return -EINVAL;
|
|
|
- break;
|
|
|
- case IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER:
|
|
|
- case IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED:
|
|
|
- if (!(ht_opmode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT))
|
|
|
- return -EINVAL;
|
|
|
- break;
|
|
|
- }
|
|
|
cfg->ht_opmode = ht_opmode;
|
|
|
mask |= (1 << (NL80211_MESHCONF_HT_OPMODE - 1));
|
|
|
}
|
|
@@ -10962,9 +10949,12 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
|
|
|
rem) {
|
|
|
u8 *mask_pat;
|
|
|
|
|
|
- nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
|
|
|
- nl80211_packet_pattern_policy,
|
|
|
- info->extack);
|
|
|
+ err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
|
|
|
+ nl80211_packet_pattern_policy,
|
|
|
+ info->extack);
|
|
|
+ if (err)
|
|
|
+ goto error;
|
|
|
+
|
|
|
err = -EINVAL;
|
|
|
if (!pat_tb[NL80211_PKTPAT_MASK] ||
|
|
|
!pat_tb[NL80211_PKTPAT_PATTERN])
|
|
@@ -11213,8 +11203,11 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev,
|
|
|
rem) {
|
|
|
u8 *mask_pat;
|
|
|
|
|
|
- nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
|
|
|
- nl80211_packet_pattern_policy, NULL);
|
|
|
+ err = nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
|
|
|
+ nl80211_packet_pattern_policy, NULL);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
if (!pat_tb[NL80211_PKTPAT_MASK] ||
|
|
|
!pat_tb[NL80211_PKTPAT_PATTERN])
|
|
|
return -EINVAL;
|