From 1b9006a8cb7be17a5cd5e1b442be8b82f017df50 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 13 Dec 2023 14:37:40 +0200 Subject: [PATCH] Use the link BSSID to resolve current BSS for whether to roam check Otherwise any new scan result (even manual ones if they do not set use_id=X to a non-zero value), can cause a reconnect to the same BSS when MLO is used. This is because the current BSS is not detected by wpa_supplicant_need_to_roam() and it assumes that roaming is needed. Signed-off-by: Benjamin Berg Signed-off-by: Andrei Otcheretianski --- wpa_supplicant/events.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 4644f5488..dd988e7b3 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -2304,6 +2304,7 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) { struct wpa_bss *current_bss = NULL; + const u8 *bssid; if (wpa_s->reassociate) return 1; /* explicit request to reassociate */ @@ -2317,12 +2318,17 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s, if (wpas_driver_bss_selection(wpa_s)) return 0; /* Driver-based roaming */ + if (wpa_s->valid_links) + bssid = wpa_s->links[wpa_s->mlo_assoc_link_id].bssid; + else + bssid = wpa_s->bssid; + if (wpa_s->current_ssid->ssid) - current_bss = wpa_bss_get(wpa_s, wpa_s->bssid, + current_bss = wpa_bss_get(wpa_s, bssid, wpa_s->current_ssid->ssid, wpa_s->current_ssid->ssid_len); if (!current_bss) - current_bss = wpa_bss_get_bssid(wpa_s, wpa_s->bssid); + current_bss = wpa_bss_get_bssid(wpa_s, bssid); if (!current_bss) return 1; /* current BSS not seen in scan results */