mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 18:59:22 +01:00
station: Disconnect netdev in station_free()
Call netdev_disconnect() to make netdev forget any of station.c's callbacks for connections or transitions in progress or established. Otherwise station.c will crash as soon as we're connected and try to change interface mode: ==17601== Invalid read of size 8 ==17601== at 0x11DFA0: station_disconnect_event (station.c:775) ==17601== by 0x11DFA0: station_netdev_event (station.c:1570) ==17601== by 0x115D18: netdev_disconnect_event (netdev.c:868) ==17601== by 0x115D18: netdev_mlme_notify (netdev.c:3403) ==17601== by 0x14E287: l_queue_foreach (queue.c:441) ==17601== by 0x1558B4: process_multicast (genl.c:469) ==17601== by 0x1558B4: received_data (genl.c:532) ==17601== by 0x152888: io_callback (io.c:123) ==17601== by 0x151BCD: l_main_iterate (main.c:376) ==17601== by 0x151C9B: l_main_run (main.c:423) ==17601== by 0x10FE20: main (main.c:489)
This commit is contained in:
parent
f9faeed7bb
commit
daf248e1ba
@ -2249,6 +2249,9 @@ void station_free(struct station *station)
|
|||||||
if (!l_queue_remove(station_list, station))
|
if (!l_queue_remove(station_list, station))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (station->connected_bss)
|
||||||
|
netdev_disconnect(station->netdev, NULL, NULL);
|
||||||
|
|
||||||
periodic_scan_stop(station);
|
periodic_scan_stop(station);
|
||||||
|
|
||||||
if (station->signal_agent) {
|
if (station->signal_agent) {
|
||||||
|
Loading…
Reference in New Issue
Block a user