MLD: Read the correct BSSID from the RNR

The previous implementation would find the correct TBTT record in the
RNR but then always copied the BSSID from the first record out. Fix this
to copy the BSSID from the current position.

Fixes: de5e01010c ("wpa_supplicant: Support ML probe request")
Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
This commit is contained in:
Benjamin Berg 2023-12-28 15:19:22 +02:00 committed by Jouni Malinen
parent 906dade4f9
commit a80dcf0e24

View file

@ -1529,13 +1529,12 @@ wpa_bss_parse_ml_rnr_ap_info(struct wpa_supplicant *wpa_s,
"MLD: Reported link not part of MLD"); "MLD: Reported link not part of MLD");
} else if (!(BIT(link_id) & *seen)) { } else if (!(BIT(link_id) & *seen)) {
struct wpa_bss *neigh_bss = struct wpa_bss *neigh_bss =
wpa_bss_get_bssid(wpa_s, ap_info->data + 1); wpa_bss_get_bssid(wpa_s, pos + 1);
*seen |= BIT(link_id); *seen |= BIT(link_id);
wpa_printf(MSG_DEBUG, "MLD: mld ID=%u, link ID=%u", wpa_printf(MSG_DEBUG, "MLD: mld ID=%u, link ID=%u",
*mld_params, link_id); *mld_params, link_id);
if (!neigh_bss) { if (!neigh_bss) {
*missing |= BIT(link_id); *missing |= BIT(link_id);
} else if ((!ssid || } else if ((!ssid ||
@ -1549,8 +1548,7 @@ wpa_bss_parse_ml_rnr_ap_info(struct wpa_supplicant *wpa_s,
l = &bss->mld_links[bss->n_mld_links]; l = &bss->mld_links[bss->n_mld_links];
l->link_id = link_id; l->link_id = link_id;
os_memcpy(l->bssid, ap_info->data + 1, os_memcpy(l->bssid, pos + 1, ETH_ALEN);
ETH_ALEN);
l->freq = neigh_bss->freq; l->freq = neigh_bss->freq;
l->disabled = mld_params[2] & l->disabled = mld_params[2] &
RNR_TBTT_INFO_MLD_PARAM2_LINK_DISABLED; RNR_TBTT_INFO_MLD_PARAM2_LINK_DISABLED;