diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/cfg.c | 8 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 12 |
2 files changed, 20 insertions, 0 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index d0ca6da33ca9..4e627cf2b8c1 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1253,6 +1253,14 @@ static int ieee80211_assoc(struct wiphy *wiphy, struct net_device *dev, | |||
1253 | if (ret) | 1253 | if (ret) |
1254 | return ret; | 1254 | return ret; |
1255 | 1255 | ||
1256 | if (req->use_mfp) { | ||
1257 | sdata->u.mgd.mfp = IEEE80211_MFP_REQUIRED; | ||
1258 | sdata->u.mgd.flags |= IEEE80211_STA_MFP_ENABLED; | ||
1259 | } else { | ||
1260 | sdata->u.mgd.mfp = IEEE80211_MFP_DISABLED; | ||
1261 | sdata->u.mgd.flags &= ~IEEE80211_STA_MFP_ENABLED; | ||
1262 | } | ||
1263 | |||
1256 | sdata->u.mgd.flags |= IEEE80211_STA_EXT_SME; | 1264 | sdata->u.mgd.flags |= IEEE80211_STA_EXT_SME; |
1257 | sdata->u.mgd.state = IEEE80211_STA_MLME_ASSOCIATE; | 1265 | sdata->u.mgd.state = IEEE80211_STA_MLME_ASSOCIATE; |
1258 | ieee80211_sta_req_auth(sdata); | 1266 | ieee80211_sta_req_auth(sdata); |
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: |