]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: Clean up if interface setup fails
authorMichal Kazior <michal.kazior@tieto.com>
Wed, 28 May 2014 09:57:12 +0000 (11:57 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 31 May 2014 12:53:56 +0000 (15:53 +0300)
If for some reason interface setup fails mid-way when setting up
multi-BSS AP it was possible to get segmentation fault because driver
was not properly cleaned up.

One possible trigger, when using nl80211 driver, was udev renaming an
interface created by hostapd causing, e.g., linux_set_iface_flags() to
fail.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
src/ap/hostapd.c

index 768ba3afae1f122030a8e5b51e1e1381c3efa215..71721dd6085529ffbd380b3e3531d01ed1bf25af 100644 (file)
@@ -1230,8 +1230,17 @@ int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err)
                hapd = iface->bss[j];
                if (j)
                        os_memcpy(hapd->own_addr, prev_addr, ETH_ALEN);
-               if (hostapd_setup_bss(hapd, j == 0))
+               if (hostapd_setup_bss(hapd, j == 0)) {
+                       do {
+                               hapd = iface->bss[j];
+                               hostapd_free_stas(hapd);
+                               hostapd_flush_old_stations(
+                                       hapd, WLAN_REASON_DEAUTH_LEAVING);
+                               hostapd_clear_wep(hapd);
+                               hostapd_free_hapd_data(hapd);
+                       } while (j-- > 0);
                        goto fail;
+               }
                if (hostapd_mac_comp_empty(hapd->conf->bssid) == 0)
                        prev_addr = hapd->own_addr;
        }