]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
AP MLD: Do not include empty MLO KDEs
authorIlan Peer <ilan.peer@intel.com>
Tue, 21 Nov 2023 15:23:58 +0000 (17:23 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 26 Nov 2023 15:01:02 +0000 (17:01 +0200)
Do include group MLO KDEs for links for which the information is
missing.

In addition, set the KDE buffer length based on the added data.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
src/ap/wpa_auth.c

index 69adcf3a5ed91e04dac7c998523c2afab1112dcd..bffbc64d9910347b9f5b797706e808e5a3ed8769 100644 (file)
@@ -3888,7 +3888,8 @@ static u8 * wpa_auth_ml_group_kdes(struct wpa_state_machine *sm, u8 *pos)
 
        /* Add MLO GTK KDEs */
        for (i = 0, link_id = 0; link_id < MAX_NUM_MLD_LINKS; link_id++) {
-               if (!sm->mld_links[link_id].valid)
+               if (!sm->mld_links[link_id].valid ||
+                   !ml_key_info.links[i].gtk_len)
                        continue;
 
                wpa_printf(MSG_DEBUG, "RSN: MLO GTK: link=%u", link_id);
@@ -3920,7 +3921,8 @@ static u8 * wpa_auth_ml_group_kdes(struct wpa_state_machine *sm, u8 *pos)
 
        /* Add MLO IGTK KDEs */
        for (i = 0, link_id = 0; link_id < MAX_NUM_MLD_LINKS; link_id++) {
-               if (!sm->mld_links[link_id].valid)
+               if (!sm->mld_links[link_id].valid ||
+                   !ml_key_info.links[i].igtk_len)
                        continue;
 
                wpa_printf(MSG_DEBUG, "RSN: MLO IGTK: link=%u", link_id);
@@ -3959,7 +3961,9 @@ static u8 * wpa_auth_ml_group_kdes(struct wpa_state_machine *sm, u8 *pos)
 
        /* Add MLO BIGTK KDEs */
        for (i = 0, link_id = 0; link_id < MAX_NUM_MLD_LINKS; link_id++) {
-               if (!sm->mld_links[link_id].valid)
+               if (!sm->mld_links[link_id].valid ||
+                   !ml_key_info.links[i].bigtk ||
+                   !ml_key_info.links[i].igtk_len)
                        continue;
 
                wpa_printf(MSG_DEBUG, "RSN: MLO BIGTK: link=%u", link_id);
@@ -4755,7 +4759,8 @@ SM_STATE(WPA_PTK_GROUP, REKEYNEGOTIATING)
                                return;
 
                        kde = pos = kde_buf;
-                       wpa_auth_ml_group_kdes(sm, pos);
+                       pos = wpa_auth_ml_group_kdes(sm, pos);
+                       kde_len = pos - kde_buf;
                }
 #endif /* CONFIG_IEEE80211BE */
        } else {