[PATCH v2] wifi:Remove passive scan on new active scan

yaming.chen <[email protected]> Wed, 14 Jan 2026 17:47:22 +0800
Newsgroups dev.linux.lists.connman
Message-ID <[email protected]>
If BackgroundScanning is enable, the old passive scanning task
needs to be removed when the new active scanning is triggered.
It can prevent the old passive scan timeout handler function
from accessing the dangling pointer after restarting the
wpa_supplicant and wifi driver.

Changes since v1:
- Shorten the patch subject and inline code comments

---
 plugins/wifi.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/plugins/wifi.c b/plugins/wifi.c
index 12389fa6..96c0c127 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -1999,13 +1999,22 @@ static int wifi_scan(struct connman_device *device,
 		}
 	}
 
+	/*
+	 * If BackgroundScanning is enable, the old passive scanning task
+	 * needs to be removed when the new active scanning is triggered.
+	 * It can prevent the old passive scan timeout handler function
+	 * from accessing the dangling pointer after restarting the
+	 * wpa_supplicant and wifi driver.
+	 */
+	if (connman_setting_get_bool("BackgroundScanning") ||
+			wifi->scanning_type != WIFI_SCANNING_PASSIVE) {
+		connman_device_ref(device);
+		reset_autoscan(device);
+	}
+
 	/* Distinguish between devices performing passive and active scanning */
 	wifi_update_scanner_type(wifi, WIFI_SCANNING_ACTIVE);
 
-	connman_device_ref(device);
-
-	reset_autoscan(device);
-
 	ret = g_supplicant_interface_scan(wifi->interface, scan_params,
 						scan_callback, device);
 	if (ret == 0) {
-- 
2.34.1