diff mbox

[5/9] wpa_supplicant: Handle EVENT_SCAN_RESULTS when an interface is disabled

Message ID 1456749005-23422-5-git-send-email-ilan.peer@intel.com
State Accepted
Headers show

Commit Message

Ilan Peer Feb. 29, 2016, 12:30 p.m. UTC
An interface can be disabled while it has an ongoing scan request.
In such a case, when the scan results notification is received
it is being ignored (as the interface is already disabled) so the
scan state is 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 | 9 +++++++++
 1 file changed, 9 insertions(+)
diff mbox

Patch

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 318aad7..4112e91 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -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;