From ac1a2240922f0815533855c72d2c252223785897 Mon Sep 17 00:00:00 2001 From: Michal Kazior Date: Wed, 28 May 2014 11:57:12 +0200 Subject: [PATCH] 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 --- src/ap/hostapd.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 768ba3afa..71721dd60 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -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; }