]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Clear ignore_next_local_deauth flag
authorAyala Beker <ayala.beker@intel.com>
Tue, 3 Nov 2015 14:24:57 +0000 (16:24 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 21 Nov 2015 16:00:33 +0000 (18:00 +0200)
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 <ayala.beker@intel.com>
src/drivers/driver_nl80211_event.c

index e982ca8cebd46ec82200357662de445195eeed55..4d7ac47d2cb445b3622e98232daa68cdb48832bd 100644 (file)
@@ -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;
                }