[PATCH 1/1] Avoid double invocation of wpa_driver_nl80211_sta_remove function from ap_sta_disconnect context.

Jithu Jance jithujance at gmail.com
Mon Aug 15 22:13:44 PDT 2016


Hi Jouni,

For "device_ap_sme" devices, the ap_sta_disconnect call in
supplicant results in two calls to wpa_driver_nl80211_sta_remove.

ap_sta_disconnect > hostapd_drv_sta_deauth > wpa_driver_nl80211_sta_remove
ap_sta_disconnect > ap_sta_deauth_cb_timeout > ap_sta_remove > hostapd_drv_sta_remove

The ap_sta_deauth_cb_timeout is invoked immediately (timeout of [0,0]) for
device_ap_sme devices. The hostapd_drv_sta_deauth call can be avoided
for devices without WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS set.

	##### Sample logs
	+++++++++++++++++++++++++++++++++++++++++++++++++ Example logs
	D/wpa_supplicant(16311): p2p-wlan0-0: IEEE 802.1X: Force disconnection
	after EAP-Failure

	D/wpa_supplicant(16311): nl80211: sta_remove -> DEL_STATION
	p2p-wlan0-0 02:90:4c:74:40:14 --> 0 (Success) <====================== 1st call
	D/wpa_supplicant(16311): ap_sta_disconnect: reschedule ap_handle_timer
	timeout for 02:90:4c:74:40:14 (5 seconds -
	AP_MAX_INACTIVITY_AFTER_DEAUTH)
	D/wpa_supplicant(16311): IEEE 802.1X: 02:90:4c:74:40:14 BE_AUTH
	entering state IDLE
	D/wpa_supplicant(16311): IEEE 802.1X: 02:90:4c:74:40:14 AUTH_PAE
	entering state INITIALIZE
	D/wpa_supplicant(16311): EAP: EAP entering state DISABLED
	D/wpa_supplicant(16311): Removing STA 02:90:4c:74:40:14 from kernel driver

	D/wpa_supplicant(16311): nl80211: sta_remove -> DEL_STATION
	p2p-wlan0-0 02:90:4c:74:40:14 --> 0 (Success) <======================  2nd call
	D/wpa_supplicant(16311): hostapd_logger: STA 02:90:4c:74:40:14 -
	MLME-DEAUTHENTICATE.indication(02:90:4c:74:40:14, 23)
	D/wpa_supplicant(16311): hostapd_logger: STA 02:90:4c:74:40:14 -
	MLME-DELETEKEYS.request(02:90:4c:74:40:14)
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Signed-off-by: Jithu Jance <jithujance at gmail.com>
---
 src/ap/sta_info.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c
index c36842b..c9b6578 100644
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
@@ -1198,7 +1198,8 @@ void ap_sta_disconnect(struct hostapd_data *hapd, struct sta_info *sta,
 	if (sta == NULL && addr)
 		sta = ap_get_sta(hapd, addr);
 
-	if (addr)
+	if (addr && (hapd->iface->drv_flags &
+			WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS))
 		hostapd_drv_sta_deauth(hapd, addr, reason);
 
 	if (sta == NULL)
-- 
1.9.1




More information about the Hostap mailing list