Fix TKIP countermeasures stopping in deinit paths

The eloop timeout to stop TKIP countermeasures has to be canceled
on deinit path to avoid leaving bogus timeouts behind.

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2011-10-30 12:43:30 +02:00
parent e9c3c1afed
commit 01a1749156
6 changed files with 19 additions and 6 deletions

View file

@ -1,6 +1,6 @@
/* /*
* hostapd / TKIP countermeasures * hostapd / TKIP countermeasures
* Copyright (c) 2002-2009, Jouni Malinen <j@w1.fi> * Copyright (c) 2002-2011, Jouni Malinen <j@w1.fi>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
@ -60,6 +60,12 @@ static void ieee80211_tkip_countermeasures_start(struct hostapd_data *hapd)
} }
void ieee80211_tkip_countermeasures_deinit(struct hostapd_data *hapd)
{
eloop_cancel_timeout(ieee80211_tkip_countermeasures_stop, hapd, NULL);
}
void michael_mic_failure(struct hostapd_data *hapd, const u8 *addr, int local) void michael_mic_failure(struct hostapd_data *hapd, const u8 *addr, int local)
{ {
struct os_time now; struct os_time now;

View file

@ -1,6 +1,6 @@
/* /*
* hostapd / TKIP countermeasures * hostapd / TKIP countermeasures
* Copyright (c) 2002-2009, Jouni Malinen <j@w1.fi> * Copyright (c) 2002-2011, Jouni Malinen <j@w1.fi>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
@ -16,5 +16,6 @@
#define TKIP_COUNTERMEASURES_H #define TKIP_COUNTERMEASURES_H
void michael_mic_failure(struct hostapd_data *hapd, const u8 *addr, int local); void michael_mic_failure(struct hostapd_data *hapd, const u8 *addr, int local);
void ieee80211_tkip_countermeasures_deinit(struct hostapd_data *hapd);
#endif /* TKIP_COUNTERMEASURES_H */ #endif /* TKIP_COUNTERMEASURES_H */

View file

@ -548,6 +548,7 @@ void hostapd_reconfig_wpa(struct hostapd_data *hapd)
void hostapd_deinit_wpa(struct hostapd_data *hapd) void hostapd_deinit_wpa(struct hostapd_data *hapd)
{ {
ieee80211_tkip_countermeasures_deinit(hapd);
rsn_preauth_iface_deinit(hapd); rsn_preauth_iface_deinit(hapd);
if (hapd->wpa_auth) { if (hapd->wpa_auth) {
wpa_deinit(hapd->wpa_auth); wpa_deinit(hapd->wpa_auth);

View file

@ -96,8 +96,7 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
} }
static void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx)
void *sock_ctx)
{ {
struct wpa_supplicant *wpa_s = eloop_ctx; struct wpa_supplicant *wpa_s = eloop_ctx;
@ -1584,8 +1583,7 @@ static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
#ifdef CONFIG_DELAYED_MIC_ERROR_REPORT #ifdef CONFIG_DELAYED_MIC_ERROR_REPORT
static void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx)
void *sock_ctx)
{ {
struct wpa_supplicant *wpa_s = eloop_ctx; struct wpa_supplicant *wpa_s = eloop_ctx;

View file

@ -434,6 +434,11 @@ static void wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s)
wpa_supplicant_cancel_scan(wpa_s); wpa_supplicant_cancel_scan(wpa_s);
wpa_supplicant_cancel_auth_timeout(wpa_s); wpa_supplicant_cancel_auth_timeout(wpa_s);
eloop_cancel_timeout(wpa_supplicant_stop_countermeasures, wpa_s, NULL);
#ifdef CONFIG_DELAYED_MIC_ERROR_REPORT
eloop_cancel_timeout(wpa_supplicant_delayed_mic_error_report,
wpa_s, NULL);
#endif /* CONFIG_DELAYED_MIC_ERROR_REPORT */
wpas_wps_deinit(wpa_s); wpas_wps_deinit(wpa_s);

View file

@ -585,6 +585,8 @@ void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);
int wpa_supplicant_connect(struct wpa_supplicant *wpa_s, int wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
struct wpa_bss *selected, struct wpa_bss *selected,
struct wpa_ssid *ssid); struct wpa_ssid *ssid);
void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx);
void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx);
/* eap_register.c */ /* eap_register.c */
int eap_register_methods(void); int eap_register_methods(void);