Re: [PATCH] wifi:Fix the crash issue when restarting the wpa_supplicant or wifi driver while BackgroundScanning is enable
Michael Nazzareno Trimarchi <[email protected]> Wed, 14 Jan 2026 09:11:08 +0100
| Newsgroups | dev.linux.lists.connman |
|---|---|
| Message-ID | <CAOf5uwkx6cneRS6Ujo6HtrpXgRmBZdBanr+XOJxGHbO2cbYn0w@mail.gmail.com> |
Hi Some nit, try to reduce the subject of the patch to < 80 chars, for rendering problem On Wed, Jan 14, 2026 at 9:07=E2=80=AFAM yaming.chen <[email protected]> = wrote: > > If BackgroundScanning is enable, passive auto scanning timeout work need = to > be removed when a new active scanning is triggered.Because wifi->autoscan > and auto scanning timeout work will be receated for new active scanning, = but > old passive auto scanning timeout work is still running, if wifi firmware= or > wpa_supplicant is restarted at some time in the future, old wifi and auto= scan > objects pointers will be freed, so wifi and wifi->autoscan objects pointe= rs will > be dangling pointers when the timeout handler function of old passive sca= nning > work will obtain wifi and wifi->autoscan objects, it will trigger a crash= of connman. > --- > plugins/wifi.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > Reviewed-by: Michael Trimarchi <[email protected]> > diff --git a/plugins/wifi.c b/plugins/wifi.c > index 12389fa6..191c4fa0 100644 > --- a/plugins/wifi.c > +++ b/plugins/wifi.c > @@ -1999,13 +1999,25 @@ static int wifi_scan(struct connman_device *devic= e, > } > } > > + /* > + * If BackgroundScanning is enable, passive auto scanning timeout= work need to > + * be removed when a new active scanning is triggered.Because wif= i->autoscan > + * and auto scanning timeout work will be receated for new active= scanning, but > + * old passive auto scanning timeout work is still running, if wi= fi firmware or > + * wpa_supplicant is restarted at some time in the future, old wi= fi and autoscan > + * objects pointers will be freed, so wifi and wifi->autoscan obj= ects pointers will > + * be dangling pointers when the timeout handler function of old = passive scanning > + * work will obtain wifi and wifi->autoscan objects, it will trig= ger a crash of connman. > + */ > + if (connman_setting_get_bool("BackgroundScanning") || > + wifi->scanning_type !=3D WIFI_SCANNING_PASSIVE) { > + connman_device_ref(device); > + reset_autoscan(device); > + } > + > /* Distinguish between devices performing passive and active scan= ning */ > wifi_update_scanner_type(wifi, WIFI_SCANNING_ACTIVE); > > - connman_device_ref(device); > - > - reset_autoscan(device); > - > ret =3D g_supplicant_interface_scan(wifi->interface, scan_params, > scan_callback, device); > if (ret =3D=3D 0) { > -- > 2.34.1 > --=20 Michael Nazzareno Trimarchi Co-Founder & Chief Executive Officer M. +39 347 913 2170 [email protected] __________________________________ Amarula Solutions BV Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172 [email protected] www.amarulasolutions.com