diff options
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r-- | net/wireless/nl80211.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 3c53c5cbc3a9..79927706937a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -122,6 +122,7 @@ static struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] __read_mostly = { | |||
122 | [NL80211_ATTR_REASON_CODE] = { .type = NLA_U16 }, | 122 | [NL80211_ATTR_REASON_CODE] = { .type = NLA_U16 }, |
123 | [NL80211_ATTR_FREQ_FIXED] = { .type = NLA_FLAG }, | 123 | [NL80211_ATTR_FREQ_FIXED] = { .type = NLA_FLAG }, |
124 | [NL80211_ATTR_TIMED_OUT] = { .type = NLA_FLAG }, | 124 | [NL80211_ATTR_TIMED_OUT] = { .type = NLA_FLAG }, |
125 | [NL80211_ATTR_USE_MFP] = { .type = NLA_U32 }, | ||
125 | }; | 126 | }; |
126 | 127 | ||
127 | /* IE validation */ | 128 | /* IE validation */ |
@@ -3012,6 +3013,17 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info) | |||
3012 | req.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); | 3013 | req.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); |
3013 | } | 3014 | } |
3014 | 3015 | ||
3016 | if (info->attrs[NL80211_ATTR_USE_MFP]) { | ||
3017 | enum nl80211_mfp use_mfp = | ||
3018 | nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]); | ||
3019 | if (use_mfp == NL80211_MFP_REQUIRED) | ||
3020 | req.use_mfp = true; | ||
3021 | else if (use_mfp != NL80211_MFP_NO) { | ||
3022 | err = -EINVAL; | ||
3023 | goto out; | ||
3024 | } | ||
3025 | } | ||
3026 | |||
3015 | err = drv->ops->assoc(&drv->wiphy, dev, &req); | 3027 | err = drv->ops->assoc(&drv->wiphy, dev, &req); |
3016 | 3028 | ||
3017 | out: | 3029 | out: |