[PATCH 10/18] wpa_supplicant: Fix PNO restart flow

andrei.otcheretianski at intel.com andrei.otcheretianski at intel.com
Mon Sep 5 07:33:03 PDT 2016


From: Avraham Stern <avraham.stern at intel.com>

PNO is sometimes restarted due to changes in scan parameters
(e.g., selected network changed or MAC randomization being
 enabled/disabled).
Restart is done by stopping PNO and immediately starting it again.
This may result in the SCHED_SCAN_STOPPED event being received after
the request for new PNO, which will make wpa_supplicant believe PNO
is not active although it is actually is. As a result, the next
request to start PNO will fail because PNO is active and should be
stopped first.

Fix this by deferring the request to start PNO until the
SCHED_SCAN_STOPPED event is received.

Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
 wpa_supplicant/scan.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index 47629de..6dfd2e8 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -2420,6 +2420,13 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s)
 		}
 	}
 
+	if (wpa_s->sched_scan_stop_req) {
+		wpa_printf(MSG_DEBUG,
+			   "Schedule PNO after previous sched scan has stopped");
+		wpa_s->pno_sched_pending = 1;
+		return 0;
+	}
+
 	os_memset(&params, 0, sizeof(params));
 
 	num_ssid = num_match_ssid = 0;
-- 
1.9.1




More information about the Hostap mailing list