From 6b585f420affe803b50474f365686391a11b54aa Mon Sep 17 00:00:00 2001 From: Saurav Babu Date: Fri, 27 Jan 2017 17:16:51 +0530 Subject: [PATCH] mesh: Fix crash on removing virtual mesh interface If a virtual mesh interface has been created and is still operational when the main interface is removed (e.g., Wi-Fi hardware ejected), the following crash occurred with the below backtrace: WPA_TRACE: eloop SIGSEGV - START [1]: /usr/local/sbin/wpa_supplicant() [0x44ef7e] eloop_sigsegv_handler() home/saurav/hostap/wpa_supplicant/../src/utils/eloop.c:123 [2]: /lib/x86_64-linux-gnu/libc.so.6(+0x36d40) [0x7f4c395cfd40] [3]: /usr/local/sbin/wpa_supplicant(wpa_supplicant_remove_iface+0xd0) [0x57f500] wpa_supplicant_remove_iface() home/saurav/hostap/wpa_supplicant/wpa_supplicant.c:5338 [4]: /usr/local/sbin/wpa_supplicant() [0x57fbef] wpa_supplicant_deinit_iface() home/saurav/hostap/wpa_supplicant/wpa_supplicant.c:5069 [5]: /usr/local/sbin/wpa_supplicant(wpa_supplicant_remove_iface+0xc5) [0x57f4f5] wpa_supplicant_remove_iface() home/saurav/hostap/wpa_supplicant/wpa_supplicant.c:5343 [6]: /usr/local/sbin/wpa_supplicant(wpas_dbus_handler_remove_interface+0x8d) [0x55baad] wpas_dbus_handler_remove_interface() home/saurav/hostap/wpa_supplicant/dbus/dbus_new_handlers.c:679 [7]: /usr/local/sbin/wpa_supplicant() [0x5560cb] msg_method_handler() home/saurav/hostap/wpa_supplicant/dbus/dbus_new_helpers.c:354 message_handler() home/saurav/hostap/wpa_supplicant/dbus/dbus_new_helpers.c:410 [8]: /lib/x86_64-linux-gnu/libdbus-1.so.3(+0x1be86) [0x7f4c39979e86] [9]: /lib/x86_64-linux-gnu/libdbus-1.so.3(dbus_connection_dispatch+0x381) [0x7f4c3996ca21] [10]: /usr/local/sbin/wpa_supplicant() [0x567148] dispatch_data() home/saurav/hostap/wpa_supplicant/dbus/dbus_common.c:36 [11]: /usr/local/sbin/wpa_supplicant() [0x5674a7] process_watch() home/saurav/hostap/wpa_supplicant/dbus/dbus_common.c:75 process_watch_read() home/saurav/hostap/wpa_supplicant/dbus/dbus_common.c:90 [12]: /usr/local/sbin/wpa_supplicant() [0x44f297] eloop_sock_table_dispatch() home/saurav/hostap/wpa_supplicant/../src/utils/eloop.c:598 [13]: /usr/local/sbin/wpa_supplicant(eloop_run+0x1fe) [0x44ff1e] eloop_run() home/saurav/hostap/wpa_supplicant/../src/utils/eloop.c:1219 [14]: /usr/local/sbin/wpa_supplicant(wpa_supplicant_run+0x77) [0x57fd87] wpa_supplicant_run() home/saurav/hostap/wpa_supplicant/wpa_supplicant.c:5608 [15]: /usr/local/sbin/wpa_supplicant(main+0x3a8) [0x43ba88] main() home/saurav/hostap/wpa_supplicant/main.c:392 WPA_TRACE: eloop SIGSEGV - END Aborted (core dumped) Signed-off-by: Saurav Babu --- wpa_supplicant/wpa_supplicant.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 39d57663c..75e58eef3 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -5351,7 +5351,7 @@ int wpa_supplicant_remove_iface(struct wpa_global *global, #ifdef CONFIG_MESH if (mesh_if_created) { - wpa_drv_if_remove(global->ifaces, WPA_IF_MESH, ifname); + wpa_drv_if_remove(wpa_s->parent, WPA_IF_MESH, ifname); os_free(ifname); } #endif /* CONFIG_MESH */