diff options
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index dc08211c6c6b..aee252d65b8f 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -4368,9 +4368,15 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) | |||
4368 | } | 4368 | } |
4369 | } | 4369 | } |
4370 | 4370 | ||
4371 | if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) | 4371 | if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) { |
4372 | request->flags = nla_get_u32( | 4372 | request->flags = nla_get_u32( |
4373 | info->attrs[NL80211_ATTR_SCAN_FLAGS]); | 4373 | info->attrs[NL80211_ATTR_SCAN_FLAGS]); |
4374 | if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) && | ||
4375 | !(wiphy->features & NL80211_FEATURE_LOW_PRIORITY_SCAN)) { | ||
4376 | err = -EOPNOTSUPP; | ||
4377 | goto out_free; | ||
4378 | } | ||
4379 | } | ||
4374 | 4380 | ||
4375 | request->no_cck = | 4381 | request->no_cck = |
4376 | nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); | 4382 | nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); |
@@ -4603,9 +4609,15 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, | |||
4603 | request->ie_len); | 4609 | request->ie_len); |
4604 | } | 4610 | } |
4605 | 4611 | ||
4606 | if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) | 4612 | if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) { |
4607 | request->flags = nla_get_u32( | 4613 | request->flags = nla_get_u32( |
4608 | info->attrs[NL80211_ATTR_SCAN_FLAGS]); | 4614 | info->attrs[NL80211_ATTR_SCAN_FLAGS]); |
4615 | if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) && | ||
4616 | !(wiphy->features & NL80211_FEATURE_LOW_PRIORITY_SCAN)) { | ||
4617 | err = -EOPNOTSUPP; | ||
4618 | goto out_free; | ||
4619 | } | ||
4620 | } | ||
4609 | 4621 | ||
4610 | request->dev = dev; | 4622 | request->dev = dev; |
4611 | request->wiphy = &rdev->wiphy; | 4623 | request->wiphy = &rdev->wiphy; |