diff options
author | Jouni Malinen <jouni@qca.qualcomm.com> | 2016-10-26 17:42:02 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2016-10-27 10:03:23 -0400 |
commit | 631810603a20874554b2f17adf42b72d0f15eda5 (patch) | |
tree | 352113b5fad4f7198275e0b53c42432f94b5735a /net/wireless | |
parent | 3f817fe718c6cb3ddcc2ab04ba86faecc20ef8fe (diff) |
cfg80211: Add Fast Initial Link Setup (FILS) auth algs
This defines authentication algorithms for FILS (IEEE 802.11ai).
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 704851142eed..ff798620e929 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -3778,12 +3778,23 @@ static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev, | |||
3778 | if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && | 3778 | if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && |
3779 | auth_type == NL80211_AUTHTYPE_SAE) | 3779 | auth_type == NL80211_AUTHTYPE_SAE) |
3780 | return false; | 3780 | return false; |
3781 | if (!wiphy_ext_feature_isset(&rdev->wiphy, | ||
3782 | NL80211_EXT_FEATURE_FILS_STA) && | ||
3783 | (auth_type == NL80211_AUTHTYPE_FILS_SK || | ||
3784 | auth_type == NL80211_AUTHTYPE_FILS_SK_PFS || | ||
3785 | auth_type == NL80211_AUTHTYPE_FILS_PK)) | ||
3786 | return false; | ||
3781 | return true; | 3787 | return true; |
3782 | case NL80211_CMD_CONNECT: | 3788 | case NL80211_CMD_CONNECT: |
3783 | case NL80211_CMD_START_AP: | 3789 | case NL80211_CMD_START_AP: |
3784 | /* SAE not supported yet */ | 3790 | /* SAE not supported yet */ |
3785 | if (auth_type == NL80211_AUTHTYPE_SAE) | 3791 | if (auth_type == NL80211_AUTHTYPE_SAE) |
3786 | return false; | 3792 | return false; |
3793 | /* FILS not supported yet */ | ||
3794 | if (auth_type == NL80211_AUTHTYPE_FILS_SK || | ||
3795 | auth_type == NL80211_AUTHTYPE_FILS_SK_PFS || | ||
3796 | auth_type == NL80211_AUTHTYPE_FILS_PK) | ||
3797 | return false; | ||
3787 | return true; | 3798 | return true; |
3788 | default: | 3799 | default: |
3789 | return false; | 3800 | return false; |
@@ -7810,12 +7821,18 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info) | |||
7810 | if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE)) | 7821 | if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE)) |
7811 | return -EINVAL; | 7822 | return -EINVAL; |
7812 | 7823 | ||
7813 | if (auth_type == NL80211_AUTHTYPE_SAE && | 7824 | if ((auth_type == NL80211_AUTHTYPE_SAE || |
7825 | auth_type == NL80211_AUTHTYPE_FILS_SK || | ||
7826 | auth_type == NL80211_AUTHTYPE_FILS_SK_PFS || | ||
7827 | auth_type == NL80211_AUTHTYPE_FILS_PK) && | ||
7814 | !info->attrs[NL80211_ATTR_AUTH_DATA]) | 7828 | !info->attrs[NL80211_ATTR_AUTH_DATA]) |
7815 | return -EINVAL; | 7829 | return -EINVAL; |
7816 | 7830 | ||
7817 | if (info->attrs[NL80211_ATTR_AUTH_DATA]) { | 7831 | if (info->attrs[NL80211_ATTR_AUTH_DATA]) { |
7818 | if (auth_type != NL80211_AUTHTYPE_SAE) | 7832 | if (auth_type != NL80211_AUTHTYPE_SAE && |
7833 | auth_type != NL80211_AUTHTYPE_FILS_SK && | ||
7834 | auth_type != NL80211_AUTHTYPE_FILS_SK_PFS && | ||
7835 | auth_type != NL80211_AUTHTYPE_FILS_PK) | ||
7819 | return -EINVAL; | 7836 | return -EINVAL; |
7820 | auth_data = nla_data(info->attrs[NL80211_ATTR_AUTH_DATA]); | 7837 | auth_data = nla_data(info->attrs[NL80211_ATTR_AUTH_DATA]); |
7821 | auth_data_len = nla_len(info->attrs[NL80211_ATTR_AUTH_DATA]); | 7838 | auth_data_len = nla_len(info->attrs[NL80211_ATTR_AUTH_DATA]); |