summaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2016-10-26 17:42:02 -0400
committerJohannes Berg <johannes.berg@intel.com>2016-10-27 10:03:23 -0400
commit631810603a20874554b2f17adf42b72d0f15eda5 (patch)
tree352113b5fad4f7198275e0b53c42432f94b5735a /net/wireless
parent3f817fe718c6cb3ddcc2ab04ba86faecc20ef8fe (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.c21
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]);