]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
SME: Fix disconnec-while-authenticating
authorJouni Malinen <j@w1.fi>
Sat, 1 Sep 2012 14:20:27 +0000 (17:20 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 1 Sep 2012 14:20:27 +0000 (17:20 +0300)
Commit 0d30cc240fa36905b034dc9676f9d8da0ac18e56 forced
wpa_s->current_ssid to be cleared in wpa_supplicant_mark_disassoc()
which gets called from wpa_supplicant_event_disassoc(). This broke SME
disassoc-while-authenticating workaround for cfg80211. Fix this by
restoring wpa_s->current_ssid in case SME authentication is in progress.

Signed-hostap: Jouni Malinen <j@w1.fi>

wpa_supplicant/events.c

index 82a8541702758b0f6910de208b9782b0c8d8499c..7780e9a1070d22bf7e539d5f482eb8db8149723d 100644 (file)
@@ -1801,6 +1801,7 @@ static void wpa_supplicant_event_disassoc_finish(struct wpa_supplicant *wpa_s,
        u8 prev_pending_bssid[ETH_ALEN];
        struct wpa_bss *fast_reconnect = NULL;
        struct wpa_ssid *fast_reconnect_ssid = NULL;
+       struct wpa_ssid *last_ssid;
 
        authenticating = wpa_s->wpa_state == WPA_AUTHENTICATING;
        os_memcpy(prev_pending_bssid, wpa_s->pending_bssid, ETH_ALEN);
@@ -1869,10 +1870,13 @@ static void wpa_supplicant_event_disassoc_finish(struct wpa_supplicant *wpa_s,
                wpa_s->keys_cleared = 0;
                wpa_clear_keys(wpa_s, wpa_s->bssid);
        }
+       last_ssid = wpa_s->current_ssid;
        wpa_supplicant_mark_disassoc(wpa_s);
 
-       if (authenticating && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME))
+       if (authenticating && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)) {
                sme_disassoc_while_authenticating(wpa_s, prev_pending_bssid);
+               wpa_s->current_ssid = last_ssid;
+       }
 
        if (fast_reconnect) {
 #ifndef CONFIG_NO_SCAN_PROCESSING