hostapd: fix a crash when disabling an interface during channel list update
authorFelix Fietkau <nbd@nbd.name>
Wed, 20 Sep 2023 11:43:14 +0000 (13:43 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Sep 2023 12:11:53 +0000 (14:11 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit e9722aef9e84110331706f74f7de0942c8d657ed)

package/network/services/hostapd/patches/183-hostapd-cancel-channel_list_update_timeout-in-hostap.patch [new file with mode: 0644]
package/network/services/hostapd/patches/601-ucode_support.patch

diff --git a/package/network/services/hostapd/patches/183-hostapd-cancel-channel_list_update_timeout-in-hostap.patch b/package/network/services/hostapd/patches/183-hostapd-cancel-channel_list_update_timeout-in-hostap.patch
new file mode 100644 (file)
index 0000000..fe81318
--- /dev/null
@@ -0,0 +1,28 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Wed, 20 Sep 2023 13:41:10 +0200
+Subject: [PATCH] hostapd: cancel channel_list_update_timeout in
+ hostapd_cleanup_iface_partial
+
+Fixes a crash when disabling an interface during channel list update
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -569,6 +569,7 @@ static void sta_track_deinit(struct host
+ void hostapd_cleanup_iface_partial(struct hostapd_iface *iface)
+ {
+       wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
++      eloop_cancel_timeout(channel_list_update_timeout, iface, NULL);
+ #ifdef NEED_AP_MLME
+       hostapd_stop_setup_timers(iface);
+ #endif /* NEED_AP_MLME */
+@@ -598,7 +599,6 @@ void hostapd_cleanup_iface_partial(struc
+ static void hostapd_cleanup_iface(struct hostapd_iface *iface)
+ {
+       wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
+-      eloop_cancel_timeout(channel_list_update_timeout, iface, NULL);
+       eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface,
+                            NULL);
index 858dc52a9882b7ec54a12b9a645607e95b82b29d..285309c0caab238951629ba37351d219b898f220 100644 (file)
        hostapd_ubus_free_bss(hapd);
        accounting_deinit(hapd);
        hostapd_deinit_wpa(hapd);
-@@ -599,6 +602,7 @@ void hostapd_cleanup_iface_partial(struc
static void hostapd_cleanup_iface(struct hostapd_iface *iface)
+@@ -570,6 +573,7 @@ static void sta_track_deinit(struct host
void hostapd_cleanup_iface_partial(struct hostapd_iface *iface)
  {
        wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
 +      hostapd_ucode_free_iface(iface);
        eloop_cancel_timeout(channel_list_update_timeout, iface, NULL);
-       eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface,
-                            NULL);
+ #ifdef NEED_AP_MLME
+       hostapd_stop_setup_timers(iface);
 @@ -1189,6 +1193,7 @@ static int hostapd_start_beacon(struct h
                hapd->driver->set_operstate(hapd->drv_priv, 1);