MLO: Add MLO KDEs to EAPOL-Key msg 1/2 of the group handshake
This provides the link specific group keys and last used PN/IPN/BIPN values to the Supplicant in the MLO KDEs instead of the KDEs used for non-MLO cases. Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
79212e93f7
commit
d5e93c8043
1 changed files with 20 additions and 2 deletions
|
@ -4628,11 +4628,16 @@ SM_STATE(WPA_PTK_GROUP, REKEYNEGOTIATING)
|
||||||
{
|
{
|
||||||
u8 rsc[WPA_KEY_RSC_LEN];
|
u8 rsc[WPA_KEY_RSC_LEN];
|
||||||
struct wpa_group *gsm = sm->group;
|
struct wpa_group *gsm = sm->group;
|
||||||
const u8 *kde;
|
const u8 *kde = NULL;
|
||||||
u8 *kde_buf = NULL, *pos, hdr[2];
|
u8 *kde_buf = NULL, *pos, hdr[2];
|
||||||
size_t kde_len = 0;
|
size_t kde_len = 0;
|
||||||
u8 *gtk, stub_gtk[32];
|
u8 *gtk, stub_gtk[32];
|
||||||
struct wpa_auth_config *conf = &sm->wpa_auth->conf;
|
struct wpa_auth_config *conf = &sm->wpa_auth->conf;
|
||||||
|
bool is_mld = false;
|
||||||
|
|
||||||
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
is_mld = sm->mld_assoc_link_id >= 0;
|
||||||
|
#endif /* CONFIG_IEEE80211BE */
|
||||||
|
|
||||||
SM_ENTRY_MA(WPA_PTK_GROUP, REKEYNEGOTIATING, wpa_ptk_group);
|
SM_ENTRY_MA(WPA_PTK_GROUP, REKEYNEGOTIATING, wpa_ptk_group);
|
||||||
|
|
||||||
|
@ -4667,7 +4672,8 @@ SM_STATE(WPA_PTK_GROUP, REKEYNEGOTIATING)
|
||||||
return;
|
return;
|
||||||
gtk = stub_gtk;
|
gtk = stub_gtk;
|
||||||
}
|
}
|
||||||
if (sm->wpa == WPA_VERSION_WPA2) {
|
|
||||||
|
if (sm->wpa == WPA_VERSION_WPA2 && !is_mld) {
|
||||||
kde_len = 2 + RSN_SELECTOR_LEN + 2 + gsm->GTK_len +
|
kde_len = 2 + RSN_SELECTOR_LEN + 2 + gsm->GTK_len +
|
||||||
ieee80211w_kde_len(sm) + ocv_oci_len(sm);
|
ieee80211w_kde_len(sm) + ocv_oci_len(sm);
|
||||||
kde_buf = os_malloc(kde_len);
|
kde_buf = os_malloc(kde_len);
|
||||||
|
@ -4686,6 +4692,18 @@ SM_STATE(WPA_PTK_GROUP, REKEYNEGOTIATING)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
kde_len = pos - kde;
|
kde_len = pos - kde;
|
||||||
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
} else if (sm->wpa == WPA_VERSION_WPA2 && is_mld) {
|
||||||
|
kde_len = wpa_auth_ml_group_kdes_len(sm);
|
||||||
|
if (kde_len) {
|
||||||
|
kde_buf = os_malloc(kde_len);
|
||||||
|
if (!kde_buf)
|
||||||
|
return;
|
||||||
|
|
||||||
|
kde = pos = kde_buf;
|
||||||
|
wpa_auth_ml_group_kdes(sm, pos);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_IEEE80211BE */
|
||||||
} else {
|
} else {
|
||||||
kde = gtk;
|
kde = gtk;
|
||||||
kde_len = gsm->GTK_len;
|
kde_len = gsm->GTK_len;
|
||||||
|
|
Loading…
Reference in a new issue