Commit 76804d28 authored by Arend Van Spriel's avatar Arend Van Spriel Committed by Johannes Berg

cfg80211: use separate struct for FILS parameters

Put FILS related parameters into their own struct definition so
it can be reused for roam events in subsequent change.
Reviewed-by: default avatarJithu Jance <jithu.jance@broadcom.com>
Reviewed-by: default avatarEylon Pedinovsky <eylon.pedinovsky@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent d1e23c94
...@@ -5420,6 +5420,30 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) ...@@ -5420,6 +5420,30 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
#define CFG80211_TESTMODE_DUMP(cmd) #define CFG80211_TESTMODE_DUMP(cmd)
#endif #endif
/**
* struct cfg80211_fils_resp_params - FILS connection response params
* @kek: KEK derived from a successful FILS connection (may be %NULL)
* @kek_len: Length of @fils_kek in octets
* @update_erp_next_seq_num: Boolean value to specify whether the value in
* @erp_next_seq_num is valid.
* @erp_next_seq_num: The next sequence number to use in ERP message in
* FILS Authentication. This value should be specified irrespective of the
* status for a FILS connection.
* @pmk: A new PMK if derived from a successful FILS connection (may be %NULL).
* @pmk_len: Length of @pmk in octets
* @pmkid: A new PMKID if derived from a successful FILS connection or the PMKID
* used for this FILS connection (may be %NULL).
*/
struct cfg80211_fils_resp_params {
const u8 *kek;
size_t kek_len;
bool update_erp_next_seq_num;
u16 erp_next_seq_num;
const u8 *pmk;
size_t pmk_len;
const u8 *pmkid;
};
/** /**
* struct cfg80211_connect_resp_params - Connection response params * struct cfg80211_connect_resp_params - Connection response params
* @status: Status code, %WLAN_STATUS_SUCCESS for successful connection, use * @status: Status code, %WLAN_STATUS_SUCCESS for successful connection, use
...@@ -5438,17 +5462,7 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) ...@@ -5438,17 +5462,7 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
* @req_ie_len: Association request IEs length * @req_ie_len: Association request IEs length
* @resp_ie: Association response IEs (may be %NULL) * @resp_ie: Association response IEs (may be %NULL)
* @resp_ie_len: Association response IEs length * @resp_ie_len: Association response IEs length
* @fils_kek: KEK derived from a successful FILS connection (may be %NULL) * @fils: FILS connection response parameters.
* @fils_kek_len: Length of @fils_kek in octets
* @update_erp_next_seq_num: Boolean value to specify whether the value in
* @fils_erp_next_seq_num is valid.
* @fils_erp_next_seq_num: The next sequence number to use in ERP message in
* FILS Authentication. This value should be specified irrespective of the
* status for a FILS connection.
* @pmk: A new PMK if derived from a successful FILS connection (may be %NULL).
* @pmk_len: Length of @pmk in octets
* @pmkid: A new PMKID if derived from a successful FILS connection or the PMKID
* used for this FILS connection (may be %NULL).
* @timeout_reason: Reason for connection timeout. This is used when the * @timeout_reason: Reason for connection timeout. This is used when the
* connection fails due to a timeout instead of an explicit rejection from * connection fails due to a timeout instead of an explicit rejection from
* the AP. %NL80211_TIMEOUT_UNSPECIFIED is used when the timeout reason is * the AP. %NL80211_TIMEOUT_UNSPECIFIED is used when the timeout reason is
...@@ -5464,13 +5478,7 @@ struct cfg80211_connect_resp_params { ...@@ -5464,13 +5478,7 @@ struct cfg80211_connect_resp_params {
size_t req_ie_len; size_t req_ie_len;
const u8 *resp_ie; const u8 *resp_ie;
size_t resp_ie_len; size_t resp_ie_len;
const u8 *fils_kek; struct cfg80211_fils_resp_params fils;
size_t fils_kek_len;
bool update_erp_next_seq_num;
u16 fils_erp_next_seq_num;
const u8 *pmk;
size_t pmk_len;
const u8 *pmkid;
enum nl80211_timeout_reason timeout_reason; enum nl80211_timeout_reason timeout_reason;
}; };
......
...@@ -14206,8 +14206,8 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, ...@@ -14206,8 +14206,8 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
void *hdr; void *hdr;
msg = nlmsg_new(100 + cr->req_ie_len + cr->resp_ie_len + msg = nlmsg_new(100 + cr->req_ie_len + cr->resp_ie_len +
cr->fils_kek_len + cr->pmk_len + cr->fils.kek_len + cr->fils.pmk_len +
(cr->pmkid ? WLAN_PMKID_LEN : 0), gfp); (cr->fils.pmkid ? WLAN_PMKID_LEN : 0), gfp);
if (!msg) if (!msg)
return; return;
...@@ -14233,17 +14233,17 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, ...@@ -14233,17 +14233,17 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
(cr->resp_ie && (cr->resp_ie &&
nla_put(msg, NL80211_ATTR_RESP_IE, cr->resp_ie_len, nla_put(msg, NL80211_ATTR_RESP_IE, cr->resp_ie_len,
cr->resp_ie)) || cr->resp_ie)) ||
(cr->update_erp_next_seq_num && (cr->fils.update_erp_next_seq_num &&
nla_put_u16(msg, NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM, nla_put_u16(msg, NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM,
cr->fils_erp_next_seq_num)) || cr->fils.erp_next_seq_num)) ||
(cr->status == WLAN_STATUS_SUCCESS && (cr->status == WLAN_STATUS_SUCCESS &&
((cr->fils_kek && ((cr->fils.kek &&
nla_put(msg, NL80211_ATTR_FILS_KEK, cr->fils_kek_len, nla_put(msg, NL80211_ATTR_FILS_KEK, cr->fils.kek_len,
cr->fils_kek)) || cr->fils.kek)) ||
(cr->pmk && (cr->fils.pmk &&
nla_put(msg, NL80211_ATTR_PMK, cr->pmk_len, cr->pmk)) || nla_put(msg, NL80211_ATTR_PMK, cr->fils.pmk_len, cr->fils.pmk)) ||
(cr->pmkid && (cr->fils.pmkid &&
nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, cr->pmkid))))) nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, cr->fils.pmkid)))))
goto nla_put_failure; goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
......
...@@ -803,8 +803,8 @@ void cfg80211_connect_done(struct net_device *dev, ...@@ -803,8 +803,8 @@ void cfg80211_connect_done(struct net_device *dev,
ev = kzalloc(sizeof(*ev) + (params->bssid ? ETH_ALEN : 0) + ev = kzalloc(sizeof(*ev) + (params->bssid ? ETH_ALEN : 0) +
params->req_ie_len + params->resp_ie_len + params->req_ie_len + params->resp_ie_len +
params->fils_kek_len + params->pmk_len + params->fils.kek_len + params->fils.pmk_len +
(params->pmkid ? WLAN_PMKID_LEN : 0), gfp); (params->fils.pmkid ? WLAN_PMKID_LEN : 0), gfp);
if (!ev) { if (!ev) {
cfg80211_put_bss(wdev->wiphy, params->bss); cfg80211_put_bss(wdev->wiphy, params->bss);
return; return;
...@@ -831,27 +831,29 @@ void cfg80211_connect_done(struct net_device *dev, ...@@ -831,27 +831,29 @@ void cfg80211_connect_done(struct net_device *dev,
params->resp_ie_len); params->resp_ie_len);
next += params->resp_ie_len; next += params->resp_ie_len;
} }
if (params->fils_kek_len) { if (params->fils.kek_len) {
ev->cr.fils_kek = next; ev->cr.fils.kek = next;
ev->cr.fils_kek_len = params->fils_kek_len; ev->cr.fils.kek_len = params->fils.kek_len;
memcpy((void *)ev->cr.fils_kek, params->fils_kek, memcpy((void *)ev->cr.fils.kek, params->fils.kek,
params->fils_kek_len); params->fils.kek_len);
next += params->fils_kek_len; next += params->fils.kek_len;
} }
if (params->pmk_len) { if (params->fils.pmk_len) {
ev->cr.pmk = next; ev->cr.fils.pmk = next;
ev->cr.pmk_len = params->pmk_len; ev->cr.fils.pmk_len = params->fils.pmk_len;
memcpy((void *)ev->cr.pmk, params->pmk, params->pmk_len); memcpy((void *)ev->cr.fils.pmk, params->fils.pmk,
next += params->pmk_len; params->fils.pmk_len);
next += params->fils.pmk_len;
} }
if (params->pmkid) { if (params->fils.pmkid) {
ev->cr.pmkid = next; ev->cr.fils.pmkid = next;
memcpy((void *)ev->cr.pmkid, params->pmkid, WLAN_PMKID_LEN); memcpy((void *)ev->cr.fils.pmkid, params->fils.pmkid,
WLAN_PMKID_LEN);
next += WLAN_PMKID_LEN; next += WLAN_PMKID_LEN;
} }
ev->cr.update_erp_next_seq_num = params->update_erp_next_seq_num; ev->cr.fils.update_erp_next_seq_num = params->fils.update_erp_next_seq_num;
if (params->update_erp_next_seq_num) if (params->fils.update_erp_next_seq_num)
ev->cr.fils_erp_next_seq_num = params->fils_erp_next_seq_num; ev->cr.fils.erp_next_seq_num = params->fils.erp_next_seq_num;
if (params->bss) if (params->bss)
cfg80211_hold_bss(bss_from_pub(params->bss)); cfg80211_hold_bss(bss_from_pub(params->bss));
ev->cr.bss = params->bss; ev->cr.bss = params->bss;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment