From 4c803dfcd7f019256da808b01c9ddeccafa31a52 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 4 Mar 2017 13:48:29 +0200 Subject: [PATCH] ACS: Fix memory leak if interface is disabled during scan The survey data was not freed if hostapd interface got disabled during an ACS scan. Signed-off-by: Jouni Malinen --- src/ap/acs.c | 2 +- src/ap/acs.h | 5 +++++ src/ap/hostapd.c | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ap/acs.c b/src/ap/acs.c index 0cef2bff5..aa5905894 100644 --- a/src/ap/acs.c +++ b/src/ap/acs.c @@ -260,7 +260,7 @@ static void acs_clean_chan_surveys(struct hostapd_channel_data *chan) } -static void acs_cleanup(struct hostapd_iface *iface) +void acs_cleanup(struct hostapd_iface *iface) { int i; struct hostapd_channel_data *chan; diff --git a/src/ap/acs.h b/src/ap/acs.h index fc85259e8..ec84f0ee9 100644 --- a/src/ap/acs.h +++ b/src/ap/acs.h @@ -13,6 +13,7 @@ #ifdef CONFIG_ACS enum hostapd_chan_status acs_init(struct hostapd_iface *iface); +void acs_cleanup(struct hostapd_iface *iface); #else /* CONFIG_ACS */ @@ -22,6 +23,10 @@ static inline enum hostapd_chan_status acs_init(struct hostapd_iface *iface) return HOSTAPD_CHAN_INVALID; } +static inline void acs_cleanup(struct hostapd_iface *iface) +{ +} + #endif /* CONFIG_ACS */ #endif /* ACS_H */ diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 4ae7520b2..21023dd8b 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -46,6 +46,7 @@ #include "neighbor_db.h" #include "rrm.h" #include "fils_hlp.h" +#include "acs.h" static int hostapd_flush_old_stations(struct hostapd_data *hapd, u16 reason); @@ -394,8 +395,11 @@ static void hostapd_cleanup_iface_partial(struct hostapd_iface *iface) hostapd_stop_setup_timers(iface); #endif /* NEED_AP_MLME */ #endif /* CONFIG_IEEE80211N */ + if (iface->current_mode) + acs_cleanup(iface); hostapd_free_hw_features(iface->hw_features, iface->num_hw_features); iface->hw_features = NULL; + iface->current_mode = NULL; os_free(iface->current_rates); iface->current_rates = NULL; os_free(iface->basic_rates); -- 2.47.3