[PATCH 1/1] STA: update scan results for ap_scan = 1 case also

Jithu Jance jithu at broadcom.com
Wed Aug 6 02:45:40 EDT 2014


The commit 5cd4740580350371d77618ac037deef90b48d339 has rearranged
the update scan results code and hence the IEs were not getting
updated properly for ap_scan=1 case. This results in the 4 way
handshake failure in the roaming case (IE mismatch in 3/4 EAPOL).

Please see whether the patch is fine.

Signed-off-by: Jithu Jance <jithu at broadcom.com>
---
 wpa_supplicant/events.c |   28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 4e84f6e..6500069 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -86,7 +86,6 @@ static struct wpa_bss * wpa_supplicant_get_new_bss(
 static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
 {
 	struct wpa_ssid *ssid, *old_ssid;
-	struct wpa_bss *bss;
 	int res;

 	if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid)
@@ -136,17 +135,6 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
 	old_ssid = wpa_s->current_ssid;
 	wpa_s->current_ssid = ssid;

-	bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
-	if (!bss) {
-		wpa_supplicant_update_scan_results(wpa_s);
-
-		/* Get the BSS from the new scan results */
-		bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
-	}
-
-	if (bss)
-		wpa_s->current_bss = bss;
-
 	wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid);
 	wpa_supplicant_initiate_eapol(wpa_s);
 	if (old_ssid != wpa_s->current_ssid)
@@ -1906,6 +1894,22 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
 		if (wpa_supplicant_dynamic_keys(wpa_s) && !ft_completed) {
 			wpa_clear_keys(wpa_s, bssid);
 		}
+
+		if (wpa_s->current_ssid) {
+			struct wpa_bss *bss = NULL;
+
+			bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
+			if (!bss) {
+				wpa_supplicant_update_scan_results(wpa_s);
+
+				/* Get the BSS from the new scan results */
+				bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
+			}
+
+			if (bss)
+				wpa_s->current_bss = bss;
+		}
+
 		if (wpa_supplicant_select_config(wpa_s) < 0) {
 			wpa_supplicant_deauthenticate(
 				wpa_s, WLAN_REASON_DEAUTH_LEAVING);
--
1.7.9.5



More information about the HostAP mailing list