]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wpa_supplicant: Handle EVENT_SCAN_RESULTS when an interface is disabled
authorIlan Peer <ilan.peer@intel.com>
Mon, 29 Feb 2016 12:30:01 +0000 (14:30 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 3 Mar 2016 15:10:26 +0000 (17:10 +0200)
An interface can be disabled while it has an ongoing scan request.
In such a case, when the scan results notification is received,
it was being ignored (as the interface is already disabled) so the
scan state was not cleared. This can cause undetermined behavior
for the next scan request.

To handle this, clear the scan state when EVENT_SCAN_RESULTS is
received and the interface is disabled.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
wpa_supplicant/events.c

index db005158961d87fa07ad776a2206b238e1bbbaad..c39315d35f1cffe0229b2e38a9a26a5d378a38a4 100644 (file)
@@ -3343,6 +3343,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
        if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED &&
            event != EVENT_INTERFACE_ENABLED &&
            event != EVENT_INTERFACE_STATUS &&
+           event != EVENT_SCAN_RESULTS &&
            event != EVENT_SCHED_SCAN_STOPPED) {
                wpa_dbg(wpa_s, MSG_DEBUG,
                        "Ignore event %s (%d) while interface is disabled",
@@ -3429,6 +3430,14 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                }
                break;
        case EVENT_SCAN_RESULTS:
+               if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED) {
+                       wpa_s->scan_res_handler = NULL;
+                       wpa_s->own_scan_running = 0;
+                       wpa_s->radio->external_scan_running = 0;
+                       wpa_s->last_scan_req = NORMAL_SCAN_REQ;
+                       break;
+               }
+
                if (!(data && data->scan_info.external_scan) &&
                    os_reltime_initialized(&wpa_s->scan_start_time)) {
                        struct os_reltime now, diff;