]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
AP MLD: Reset authenticator state machine's ML info
authorAditya Kumar Singh <quic_adisi@quicinc.com>
Thu, 28 Mar 2024 18:16:36 +0000 (23:46 +0530)
committerJouni Malinen <j@w1.fi>
Sat, 20 Apr 2024 12:58:48 +0000 (15:58 +0300)
Authenticator state machine ML info was set only when it was created.
However, if the association is tried again, the state machine will
already exist and hence the ML info will not be refreshed. This leads to
an issue where if in the subsequent association request, the MLD info is
different than the old info, validation of it will fail.

Fix this issue by refreshing the authenticator state machine's ML info
every time association request is handled.

Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
src/ap/ieee802_11.c
src/ap/wpa_auth.c

index aae6ac38b109b869c82f987ca466437a6769a4d3..bd63a56f840a7f48d12374c6399c86b2007bc94c 100644 (file)
@@ -4024,15 +4024,15 @@ static int __check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
 
        if (hapd->conf->wpa && wpa_ie) {
                enum wpa_validate_result res;
+#ifdef CONFIG_IEEE80211BE
+               struct mld_info *info = &sta->mld_info;
+               bool init = !sta->wpa_sm;
+#endif /* CONFIG_IEEE80211BE */
 
                wpa_ie -= 2;
                wpa_ie_len += 2;
 
                if (!sta->wpa_sm) {
-#ifdef CONFIG_IEEE80211BE
-                       struct mld_info *info = &sta->mld_info;
-#endif /* CONFIG_IEEE80211BE */
-
                        sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,
                                                        sta->addr,
                                                        p2p_dev_addr);
@@ -4042,18 +4042,19 @@ static int __check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
                                           "Failed to initialize RSN state machine");
                                return WLAN_STATUS_UNSPECIFIED_FAILURE;
                        }
+               }
 
 #ifdef CONFIG_IEEE80211BE
-                       if (ap_sta_is_mld(hapd, sta)) {
-                               wpa_printf(MSG_DEBUG,
-                                          "MLD: Set ML info in RSN Authenticator");
-                               wpa_auth_set_ml_info(sta->wpa_sm,
-                                                    hapd->mld->mld_addr,
-                                                    sta->mld_assoc_link_id,
-                                                    info);
-                       }
-#endif /* CONFIG_IEEE80211BE */
+               if (ap_sta_is_mld(hapd, sta)) {
+                       wpa_printf(MSG_DEBUG,
+                                  "MLD: %s ML info in RSN Authenticator",
+                                  init ? "Set" : "Reset");
+                       wpa_auth_set_ml_info(sta->wpa_sm,
+                                            hapd->mld->mld_addr,
+                                            sta->mld_assoc_link_id,
+                                            info);
                }
+#endif /* CONFIG_IEEE80211BE */
 
                wpa_auth_set_auth_alg(sta->wpa_sm, sta->auth_alg);
                res = wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm,
index 01a10b23ce6c9c3558a40316352c5b56e3785f05..0d15c42099dc2ae245eb2ee8386477f363dfa63f 100644 (file)
@@ -6820,6 +6820,7 @@ void wpa_auth_set_ml_info(struct wpa_state_machine *sm, const u8 *mld_addr,
                return;
 
        os_memset(sm->mld_links, 0, sizeof(sm->mld_links));
+       sm->n_mld_affiliated_links = 0;
 
        wpa_auth_logger(sm->wpa_auth, wpa_auth_get_spa(sm), LOGGER_DEBUG,
                        "MLD: Initialization");