path: root/wpa_supplicant/scan.c
diff options
authorAvraham Stern <avraham.stern@intel.com>2016-09-05 14:33:03 (GMT)
committerJouni Malinen <j@w1.fi>2016-10-02 16:49:42 (GMT)
commit5ac8f8623d8dc1a47626e22a3b5a1b8e147718d2 (patch)
treef31e0b8090ead3a709ce2436b5af69df68a00f09 /wpa_supplicant/scan.c
parent14f34a73031e2878101be473d8416f7c09d37833 (diff)
Fix PNO restart flow
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 in case sched_scan is being stopped. Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Diffstat (limited to 'wpa_supplicant/scan.c')
1 files changed, 7 insertions, 0 deletions
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index 5f84b21..fb8ebdf 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;