From 757785dab2703173a05dba2830c782d24f7ad660 Mon Sep 17 00:00:00 2001 From: Ayala Beker Date: Tue, 3 Nov 2015 16:24:57 +0200 Subject: [PATCH] nl80211: Clear ignore_next_local_deauth flag The de-authentication flow in wpa_driver_nl80211_deauthenticate() can result in a locally generated de-authentication event. To avoid getting this extra event ignore_next_local_deauth flag is set, and should be cleared when the next local deauth event is received. However, it is not cleared when the event shows up after the wpa_supplicant has started a connection with a new AP, and as a result it might ignore future deauth event from the driver. Fix this by clearing the flag if the event is locally generated. Signed-off-by: Ayala Beker --- src/drivers/driver_nl80211_event.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c index e982ca8ce..4d7ac47d2 100644 --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c @@ -651,10 +651,21 @@ static void mlme_event_deauth_disassoc(struct wpa_driver_nl80211_data *drv, * Avoid issues with some roaming cases where * disconnection event for the old AP may show up after * we have started connection with the new AP. + * In case of locally generated event clear + * ignore_next_local_deauth as well, to avoid next local + * deauth event be wrongly ignored. */ - wpa_printf(MSG_DEBUG, "nl80211: Ignore deauth/disassoc event from old AP " MACSTR " when already authenticating with " MACSTR, - MAC2STR(bssid), - MAC2STR(drv->auth_attempt_bssid)); + if (!os_memcmp(mgmt->sa, drv->first_bss->addr, + ETH_ALEN)) { + wpa_printf(MSG_DEBUG, + "nl80211: Received a locally generated deauth event. Clear ignore_next_local_deauth flag"); + drv->ignore_next_local_deauth = 0; + } else { + wpa_printf(MSG_DEBUG, + "nl80211: Ignore deauth/disassoc event from old AP " MACSTR " when already authenticating with " MACSTR, + MAC2STR(bssid), + MAC2STR(drv->auth_attempt_bssid)); + } return; }