From 1d791939dcdf839b33fe96e56259242c9af2d5f7 Mon Sep 17 00:00:00 2001 From: Huang Chenming Date: Tue, 15 Jul 2025 12:40:56 +0530 Subject: [PATCH] Cancel pending connect radio work when network is removed When a network is removed it is not desired to proceed the connect process. So cancel corresponding pending connect work when the related network is removed. Signed-off-by: Huang Chenming --- wpa_supplicant/wpa_supplicant.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 1114b3b25..0586c371a 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -132,6 +132,8 @@ static void wpas_update_fils_connect_params(struct wpa_supplicant *wpa_s); #ifdef CONFIG_OWE static void wpas_update_owe_connect_params(struct wpa_supplicant *wpa_s); #endif /* CONFIG_OWE */ +static void radio_remove_pending_connect(struct wpa_supplicant *wpa_s, + const struct wpa_ssid *ssid); #ifdef CONFIG_WEP @@ -5165,6 +5167,7 @@ int wpa_supplicant_remove_network(struct wpa_supplicant *wpa_s, int id) if (!ssid) return -1; wpas_notify_network_removed(wpa_s, ssid); + radio_remove_pending_connect(wpa_s, ssid); if (ssid == prev || !prev) { #ifdef CONFIG_SME @@ -7346,6 +7349,31 @@ void radio_remove_pending_work(struct wpa_supplicant *wpa_s, void *ctx) } +static void radio_remove_pending_connect(struct wpa_supplicant *wpa_s, + const struct wpa_ssid *ssid) +{ + struct wpa_radio_work *work, *tmp; + struct wpa_radio *radio = wpa_s->radio; + struct wpa_connect_work *cwork; + + dl_list_for_each_safe(work, tmp, &radio->work, struct wpa_radio_work, + list) { + if (!radio_work_is_connect(work)) + continue; + + cwork = work->ctx; + if (cwork->ssid != ssid) + continue; + + wpa_printf(MSG_DEBUG, "Remove radio work '%s'@%p ssid=%s", + work->type, work, + wpa_ssid_txt(ssid->ssid, ssid->ssid_len)); + work->cb(work, 1); + radio_work_free(work); + } +} + + static void radio_remove_interface(struct wpa_supplicant *wpa_s) { struct wpa_radio *radio = wpa_s->radio; -- 2.47.2