mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 23:09:34 +01:00
ap: remove diagnostic interface when netdev goes down
This fixes a crash associated with toggling the iftype to AP mode then calling GetDiagnostics. The diagnostic interface is never cleaned up when netdev goes down so DBus calls can still be made which ends up crashing since the AP interface objects are no longer valid. Running the following iwctl commands in a script (once or twice) triggers this crash reliably: iwctl device wlp2s0 set-property Mode ap iwctl device wlp2s0 set-property Mode station iwctl device wlp2s0 set-property Mode ap iwctl ap wlp2s0 start myssid secret123 iwctl ap wlp2s0 show ++++++++ backtrace ++++++++ 0 0x7f8f1a8fe320 in /lib64/libc.so.6 1 0x451f35 in ap_dbus_get_diagnostics() at src/ap.c:4043 2 0x4cdf5a in _dbus_object_tree_dispatch() at ell/dbus-service.c:1815 3 0x4bffc7 in message_read_handler() at ell/dbus.c:285 4 0x4b5d7b in io_callback() at ell/io.c:120 5 0x4b489b in l_main_iterate() at ell/main.c:476 6 0x4b49a6 in l_main_run() at ell/main.c:519 7 0x4b4cd9 in l_main_run_with_signal() at ell/main.c:645 8 0x404f5b in main() at src/main.c:600 9 0x7f8f1a8e8b75 in /lib64/libc.so.6 +++++++++++++++++++++++++++
This commit is contained in:
parent
ac8e9f53f2
commit
80f9374440
2
src/ap.c
2
src/ap.c
@ -4084,6 +4084,8 @@ static void ap_remove_interface(struct netdev *netdev)
|
|||||||
{
|
{
|
||||||
l_dbus_object_remove_interface(dbus_get_bus(),
|
l_dbus_object_remove_interface(dbus_get_bus(),
|
||||||
netdev_get_path(netdev), IWD_AP_INTERFACE);
|
netdev_get_path(netdev), IWD_AP_INTERFACE);
|
||||||
|
l_dbus_object_remove_interface(dbus_get_bus(),
|
||||||
|
netdev_get_path(netdev), IWD_AP_DIAGNOSTIC_INTERFACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ap_netdev_watch(struct netdev *netdev,
|
static void ap_netdev_watch(struct netdev *netdev,
|
||||||
|
Loading…
Reference in New Issue
Block a user