Merge "cfg80211: Add KEK/nonces for FILS association frames"
This commit is contained in:
commit
0135897159
3 changed files with 24 additions and 0 deletions
|
@ -2035,6 +2035,9 @@ enum ieee80211_key_len {
|
|||
#define IEEE80211_GCMP_MIC_LEN 16
|
||||
#define IEEE80211_GCMP_PN_LEN 6
|
||||
|
||||
#define FILS_NONCE_LEN 16
|
||||
#define FILS_MAX_KEK_LEN 64
|
||||
|
||||
/* Public action codes */
|
||||
enum ieee80211_pub_actioncode {
|
||||
WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
|
||||
|
|
|
@ -1833,6 +1833,12 @@ enum cfg80211_assoc_req_flags {
|
|||
* @ht_capa_mask: The bits of ht_capa which are to be used.
|
||||
* @vht_capa: VHT capability override
|
||||
* @vht_capa_mask: VHT capability mask indicating which fields to use
|
||||
* @fils_kek: FILS KEK for protecting (Re)Association Request/Response frame or
|
||||
* %NULL if FILS is not used.
|
||||
* @fils_kek_len: Length of fils_kek in octets
|
||||
* @fils_nonces: FILS nonces (part of AAD) for protecting (Re)Association
|
||||
* Request/Response frame or %NULL if FILS is not used. This field starts
|
||||
* with 16 octets of STA Nonce followed by 16 octets of AP Nonce.
|
||||
*/
|
||||
struct cfg80211_assoc_request {
|
||||
struct cfg80211_bss *bss;
|
||||
|
@ -1844,6 +1850,9 @@ struct cfg80211_assoc_request {
|
|||
struct ieee80211_ht_cap ht_capa;
|
||||
struct ieee80211_ht_cap ht_capa_mask;
|
||||
struct ieee80211_vht_cap vht_capa, vht_capa_mask;
|
||||
const u8 *fils_kek;
|
||||
size_t fils_kek_len;
|
||||
const u8 *fils_nonces;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -408,6 +408,9 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
|||
[NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST] = {
|
||||
.len = sizeof(struct nl80211_bss_select_rssi_adjust)
|
||||
},
|
||||
[NL80211_ATTR_FILS_KEK] = { .type = NLA_BINARY,
|
||||
.len = FILS_MAX_KEK_LEN },
|
||||
[NL80211_ATTR_FILS_NONCES] = { .len = 2 * FILS_NONCE_LEN },
|
||||
[NL80211_ATTR_TIMEOUT_REASON] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
|
@ -7780,6 +7783,15 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
|
|||
req.flags |= ASSOC_REQ_USE_RRM;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_FILS_KEK]) {
|
||||
req.fils_kek = nla_data(info->attrs[NL80211_ATTR_FILS_KEK]);
|
||||
req.fils_kek_len = nla_len(info->attrs[NL80211_ATTR_FILS_KEK]);
|
||||
if (!info->attrs[NL80211_ATTR_FILS_NONCES])
|
||||
return -EINVAL;
|
||||
req.fils_nonces =
|
||||
nla_data(info->attrs[NL80211_ATTR_FILS_NONCES]);
|
||||
}
|
||||
|
||||
err = nl80211_crypto_settings(rdev, info, &req.crypto, 1);
|
||||
if (!err) {
|
||||
wdev_lock(dev->ieee80211_ptr);
|
||||
|
|
Loading…
Add table
Reference in a new issue