[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
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;

More information about the Hostap mailing list