aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant/events.c
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2012-09-01 14:20:27 (GMT)
committerJouni Malinen <j@w1.fi>2012-09-01 14:20:27 (GMT)
commitbcdf2096bd7e89161ada76c6915eb04ad98f6c77 (patch)
treebb75a92a6a1affdaf3c376fb9447256c34fc5067 /wpa_supplicant/events.c
parent0aadd5682fc75f7ed442626bdb680b1b30aa3fae (diff)
downloadhostap-bcdf2096bd7e89161ada76c6915eb04ad98f6c77.zip
hostap-bcdf2096bd7e89161ada76c6915eb04ad98f6c77.tar.gz
hostap-bcdf2096bd7e89161ada76c6915eb04ad98f6c77.tar.bz2
SME: Fix disconnec-while-authenticating
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>
Diffstat (limited to 'wpa_supplicant/events.c')
-rw-r--r--wpa_supplicant/events.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 82a8541..7780e9a 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -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