Currently STA roam works fine in case of OWE only AP to OWE-transition mode AP. The roam fails when STA is connected in OWE mode with OWE transition AP to an OWE only AP. In the OWE transition case, the current_ssid stores only open network SSID, specific check is required to compare the OWE BSS ssid from the previous target and new target. Signed-off-by: Vinayak Yadawad <vinayak.yadawad@xxxxxxxxxxxx> --- wpa_supplicant/events.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index a7c56f771..8c0adae0d 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -221,11 +221,19 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s, { struct wpa_ssid *ssid, *old_ssid; struct wpa_bss *bss; +#ifdef CONFIG_OWE + struct wpa_bss *prev_bss; +#endif /* CONFIG_OWE */ u8 drv_ssid[SSID_MAX_LEN]; size_t drv_ssid_len; int res; if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid) { +#ifdef CONFIG_OWE + /* Store the current bss before updating new bss */ + prev_bss = wpa_s->current_bss; +#endif /* CONFIG_OWE */ + wpa_supplicant_update_current_bss(wpa_s, wpa_s->bssid); if (wpa_s->current_ssid->ssid_len == 0) @@ -245,12 +253,25 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s, #ifdef CONFIG_OWE if ((wpa_s->current_ssid->key_mgmt & WPA_KEY_MGMT_OWE) && - wpa_s->current_bss && - (wpa_s->current_bss->flags & WPA_BSS_OWE_TRANSITION) && - drv_ssid_len == wpa_s->current_bss->ssid_len && - os_memcmp(drv_ssid, wpa_s->current_bss->ssid, - drv_ssid_len) == 0) - return 0; /* current profile still in use */ + wpa_s->current_bss) { + /* current bss is of OWE transition */ + if ((wpa_s->current_bss->flags & WPA_BSS_OWE_TRANSITION) && + drv_ssid_len == wpa_s->current_bss->ssid_len && + os_memcmp(drv_ssid, wpa_s->current_bss->ssid, + drv_ssid_len) == 0) + return 0; /* current profile still in use */ + + /* + * OWE transition network to OWE only network. The connected + * SSID would be that of OWE network where as current_ssid + * stores the open network SSID + */ + if (prev_bss && (prev_bss->flags & WPA_BSS_OWE_TRANSITION) && + (prev_bss->ssid_len == wpa_s->current_bss->ssid_len) && + (os_memcmp(prev_bss->ssid, wpa_s->current_bss->ssid, + wpa_s->current_bss->ssid_len) == 0)) + return 0; /* current profile still in use */ + } #endif /* CONFIG_OWE */ wpa_msg(wpa_s, MSG_DEBUG, @@ -1162,7 +1183,7 @@ static void owe_trans_ssid(struct wpa_supplicant *wpa_s, struct wpa_bss *bss, if (wpas_network_disabled(wpa_s, ssid)) continue; if (ssid->ssid_len == *ret_ssid_len && - os_memcmp(ssid->ssid, ret_ssid, *ret_ssid_len) == 0) { + os_memcmp(ssid->ssid, *ret_ssid, *ret_ssid_len) == 0) { /* OWE BSS in transition mode for a currently * enabled OWE network. */ wpa_dbg(wpa_s, MSG_DEBUG, -- 2.43.4 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap