[PATCH 1/1] hostapd: Allow roam from OWE transition to OWE only AP
Jouni Malinen
j at w1.fi
Thu Dec 26 11:04:13 PST 2024
On Fri, Dec 13, 2024 at 02:15:27PM +0530, Vinayak Yadawad wrote:
> 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.
The change in owe_trans_ssid() is a clear fix to a recent regression, so
I applied that separately. As far as the changes in
wpa_supplicant_select_config() are concerned, I'm not completely sure I
understood them since the comment about the added OWE transition mode AP
to OWE-only AP comparison of the SSID does not seem to match what I
would have expected from the actual memcmp(). The SSID of the previous
BSS (i.e., the transition mode AP) is a random value that does not match
the network profile whereas the SSID of the selected BSS (i.e., OWE-only
AP) is the SSID of the network profile. Those are different and as such,
the new memcmp() == 0 case would not be met..
Would you be able to share a debug log showing what fails without this
patch?
I did some cleanup while reviewing and trying to understand this and
this is what I came up with while still not fully understanding what
this trying to do:
From: Vinayak Yadawad <vinayak.yadawad at broadcom.com>
Date: Fri, 13 Dec 2024 14:15:27 +0530
Subject: [PATCH] OWE: Allow roam from OWE transition mode AP to OWE-only AP
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 at broadcom.com>
---
wpa_supplicant/events.c | 38 ++++++++++++++++++++++++++++++++------
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 279838afa2bf..e7285fcb5cea 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -226,6 +226,15 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s,
int res;
if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid) {
+#ifdef CONFIG_OWE
+ struct wpa_bss *prev_bss;
+
+ /* Remember the current BSS entry before update to a new one to
+ * allow appropriate comparison in OWE transition mode cases
+ * below. */
+ 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 +254,29 @@ 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) {
+ /* Handle the case where the selected BSS uses OWE
+ * transition mode */
+ 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 */
+
+ /* Handle the case where the selected BSS uses OWE-only
+ * mode and the previous one uses OWE transition mode.
+ * The connected SSID would be that of the 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,
--
2.43.0
--
Jouni Malinen PGP id EFC895FA
More information about the Hostap
mailing list