mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-23 14:12:47 +01:00
a0911ca778
Under very rare circumstances the roaming scan triggered might not be canceled properly. This is because we issue the roam scan recursively from within a scan callback and re-use the id of the scan for the subsequent request. The destroy callback is invoked right after the callback and resets the id. This leads to the scan not being canceled properly in roam_state_clear(). src/netdev.c:netdev_mlme_notify() MLME notification Notify CQM(64) src/station.c:station_roam_trigger_cb() 37 src/station.c:station_roam_scan() ifindex: 37 src/station.c:station_roam_trigger_cb() Using cached neighbor report for roam ... src/scan.c:get_scan_done() get_scan_done src/station.c:station_roam_failed() 37 src/station.c:station_roam_scan() ifindex: 37 src/scan.c:scan_request_triggered() Active scan triggered for wdev 22 ^CTerminate src/netdev.c:netdev_free() Freeing netdev wlan0[37] src/device.c:device_free() src/station.c:station_free() ... Removing scan context for wdev 22 src/scan.c:scan_context_free() sc: 0x4a362a0 src/wiphy.c:wiphy_radio_work_done() Work item 14 done ==19542== Invalid write of size 4 ==19542== at 0x411500: station_roam_scan_destroy (station.c:2010) ==19542== by 0x420B5B: scan_request_free (scan.c:156) ==19542== by 0x410BAC: destroy_work (wiphy.c:294) ==19542== by 0x410BAC: wiphy_radio_work_done (wiphy.c:1613) ==19542== by 0x46C66E: l_queue_clear (queue.c:107) ==19542== by 0x46C6B8: l_queue_destroy (queue.c:82) ==19542== by 0x420BAE: scan_context_free (scan.c:205) ==19542== by 0x424135: scan_wdev_remove (scan.c:2272) ==19542== by 0x408754: netdev_free (netdev.c:847) ==19542== by 0x40E18C: netdev_shutdown (netdev.c:5773) ==19542== by 0x404756: iwd_shutdown (main.c:78) ==19542== by 0x404756: iwd_shutdown (main.c:65) ==19542== by 0x470E21: handle_callback (signal.c:78) ==19542== by 0x470E21: signalfd_read_cb (signal.c:104) ==19542== by 0x47166B: io_callback (io.c:120) ==19542== Address 0x4d81f98 is 200 bytes inside a block of size 288 free'd ==19542== at 0x48399CB: free (vg_replace_malloc.c:538) ==19542== by 0x47F3E5: interface_instance_free (dbus-service.c:510) ==19542== by 0x481DEA: _dbus_object_tree_remove_interface (dbus-service.c:1694) ==19542== by 0x481F1C: _dbus_object_tree_object_destroy (dbus-service.c:795) ==19542== by 0x40894F: netdev_free (netdev.c:844) ==19542== by 0x40E18C: netdev_shutdown (netdev.c:5773) ==19542== by 0x404756: iwd_shutdown (main.c:78) ==19542== by 0x404756: iwd_shutdown (main.c:65) ==19542== by 0x470E21: handle_callback (signal.c:78) ==19542== by 0x470E21: signalfd_read_cb (signal.c:104) ==19542== by 0x47166B: io_callback (io.c:120) ==19542== by 0x47088C: l_main_iterate (main.c:478) ==19542== by 0x47095B: l_main_run (main.c:525) ==19542== by 0x47095B: l_main_run (main.c:507) ==19542== by 0x470B6B: l_main_run_with_signal (main.c:647) ==19542== Block was alloc'd at ==19542== at 0x483879F: malloc (vg_replace_malloc.c:307) ==19542== by 0x46AB2D: l_malloc (util.c:62) ==19542== by 0x416599: station_create (station.c:3448) ==19542== by 0x406D55: netdev_newlink_notify (netdev.c:5324) ==19542== by 0x46D4BC: l_hashmap_foreach (hashmap.c:612) ==19542== by 0x472F46: process_broadcast (netlink.c:158) ==19542== by 0x472F46: can_read_data (netlink.c:279) ==19542== by 0x47166B: io_callback (io.c:120) ==19542== by 0x47088C: l_main_iterate (main.c:478) ==19542== by 0x47095B: l_main_run (main.c:525) ==19542== by 0x47095B: l_main_run (main.c:507) ==19542== by 0x470B6B: l_main_run_with_signal (main.c:647) ==19542== by 0x403EDB: main (main.c:490) ==19542== |
||
---|---|---|
.. | ||
80-iwd.link | ||
adhoc.c | ||
agent.c | ||
agent.h | ||
anqp.c | ||
anqp.h | ||
anqputil.c | ||
anqputil.h | ||
ap.c | ||
ap.h | ||
auth-proto.h | ||
backtrace.c | ||
backtrace.h | ||
blacklist.c | ||
blacklist.h | ||
common.c | ||
common.h | ||
crypto.c | ||
crypto.h | ||
dbus.c | ||
dbus.h | ||
device.c | ||
diagnostic.c | ||
diagnostic.h | ||
eap-aka.c | ||
eap-gtc.c | ||
eap-md5.c | ||
eap-mschapv2.c | ||
eap-mschapv2.h | ||
eap-peap.c | ||
eap-private.h | ||
eap-pwd.c | ||
eap-sim.c | ||
eap-tls-common.c | ||
eap-tls-common.h | ||
eap-tls.c | ||
eap-ttls.c | ||
eap-wsc.c | ||
eap-wsc.h | ||
eap.c | ||
eap.h | ||
eapol.c | ||
eapol.h | ||
eapolutil.c | ||
eapolutil.h | ||
erp.c | ||
erp.h | ||
fils.c | ||
fils.h | ||
frame-xchg.c | ||
frame-xchg.h | ||
ft.c | ||
ft.h | ||
genbuiltin | ||
handshake.c | ||
handshake.h | ||
hotspot.c | ||
ie.c | ||
ie.h | ||
iwd-dbus.conf | ||
iwd.ap.rst | ||
iwd.config.rst | ||
iwd.debug.rst | ||
iwd.h | ||
iwd.network.rst | ||
iwd.rst | ||
iwd.service.in | ||
knownnetworks.c | ||
knownnetworks.h | ||
main.c | ||
manager.c | ||
missing.h | ||
module.c | ||
module.h | ||
mpdu.c | ||
mpdu.h | ||
mschaputil.c | ||
mschaputil.h | ||
net.connman.iwd.service | ||
netconfig.c | ||
netconfig.h | ||
netdev.c | ||
netdev.h | ||
network.c | ||
network.h | ||
nl80211cmd.c | ||
nl80211cmd.h | ||
nl80211util.c | ||
nl80211util.h | ||
ofono.c | ||
owe.c | ||
owe.h | ||
p2p.c | ||
p2p.h | ||
p2putil.c | ||
p2putil.h | ||
pkcs8.conf | ||
resolve.c | ||
resolve.h | ||
rfkill.c | ||
rfkill.h | ||
rrm.c | ||
sae.c | ||
sae.h | ||
scan.c | ||
scan.h | ||
simauth.c | ||
simauth.h | ||
simutil.c | ||
simutil.h | ||
station.c | ||
station.h | ||
storage.c | ||
storage.h | ||
util.c | ||
util.h | ||
watchlist.c | ||
watchlist.h | ||
wiphy.c | ||
wiphy.h | ||
wsc.c | ||
wsc.h | ||
wscutil.c | ||
wscutil.h |