AP MLD: Reset authenticator state machine's ML info

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>
This commit is contained in:
Aditya Kumar Singh 2024-03-28 23:46:36 +05:30 committed by Jouni Malinen
parent 866ed63243
commit 9098535ef1
2 changed files with 15 additions and 13 deletions

View file

@ -4024,15 +4024,15 @@ static int __check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
if (hapd->conf->wpa && wpa_ie) { if (hapd->conf->wpa && wpa_ie) {
enum wpa_validate_result res; 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 -= 2;
wpa_ie_len += 2; wpa_ie_len += 2;
if (!sta->wpa_sm) { 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->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,
sta->addr, sta->addr,
p2p_dev_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"); "Failed to initialize RSN state machine");
return WLAN_STATUS_UNSPECIFIED_FAILURE; return WLAN_STATUS_UNSPECIFIED_FAILURE;
} }
}
#ifdef CONFIG_IEEE80211BE #ifdef CONFIG_IEEE80211BE
if (ap_sta_is_mld(hapd, sta)) { if (ap_sta_is_mld(hapd, sta)) {
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"MLD: Set ML info in RSN Authenticator"); "MLD: %s ML info in RSN Authenticator",
init ? "Set" : "Reset");
wpa_auth_set_ml_info(sta->wpa_sm, wpa_auth_set_ml_info(sta->wpa_sm,
hapd->mld->mld_addr, hapd->mld->mld_addr,
sta->mld_assoc_link_id, sta->mld_assoc_link_id,
info); info);
} }
#endif /* CONFIG_IEEE80211BE */ #endif /* CONFIG_IEEE80211BE */
}
wpa_auth_set_auth_alg(sta->wpa_sm, sta->auth_alg); wpa_auth_set_auth_alg(sta->wpa_sm, sta->auth_alg);
res = wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm, res = wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm,

View file

@ -6820,6 +6820,7 @@ void wpa_auth_set_ml_info(struct wpa_state_machine *sm, const u8 *mld_addr,
return; return;
os_memset(sm->mld_links, 0, sizeof(sm->mld_links)); 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, wpa_auth_logger(sm->wpa_auth, wpa_auth_get_spa(sm), LOGGER_DEBUG,
"MLD: Initialization"); "MLD: Initialization");