hostapd: Clean up if interface setup fails

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>
This commit is contained in:
Michal Kazior 2014-05-28 11:57:12 +02:00 committed by Jouni Malinen
parent 81c4fca100
commit ac1a224092

View file

@ -1230,8 +1230,17 @@ int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err)
hapd = iface->bss[j]; hapd = iface->bss[j];
if (j) if (j)
os_memcpy(hapd->own_addr, prev_addr, ETH_ALEN); 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; goto fail;
}
if (hostapd_mac_comp_empty(hapd->conf->bssid) == 0) if (hostapd_mac_comp_empty(hapd->conf->bssid) == 0)
prev_addr = hapd->own_addr; prev_addr = hapd->own_addr;
} }