diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 6c301ed80..219983760 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -324,6 +324,7 @@ static int hostapd_setup_encryption(char *iface, struct hostapd_data *hapd) static int hostapd_flush_old_stations(struct hostapd_data *hapd) { int ret = 0; + u8 addr[ETH_ALEN]; if (hostapd_drv_none(hapd) || hapd->drv_priv == NULL) return 0; @@ -334,17 +335,8 @@ static int hostapd_flush_old_stations(struct hostapd_data *hapd) ret = -1; } wpa_printf(MSG_DEBUG, "Deauthenticate all stations"); - - /* New Prism2.5/3 STA firmware versions seem to have issues with this - * broadcast deauth frame. This gets the firmware in odd state where - * nothing works correctly, so let's skip sending this for the hostap - * driver. */ - if (hapd->driver && os_strcmp(hapd->driver->name, "hostap") != 0) { - u8 addr[ETH_ALEN]; - os_memset(addr, 0xff, ETH_ALEN); - hostapd_drv_sta_deauth(hapd, addr, - WLAN_REASON_PREV_AUTH_NOT_VALID); - } + os_memset(addr, 0xff, ETH_ALEN); + hostapd_drv_sta_deauth(hapd, addr, WLAN_REASON_PREV_AUTH_NOT_VALID); return ret; } diff --git a/src/drivers/driver_hostap.c b/src/drivers/driver_hostap.c index 624293b76..4fe617830 100644 --- a/src/drivers/driver_hostap.c +++ b/src/drivers/driver_hostap.c @@ -1035,6 +1035,16 @@ static int hostap_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, struct hostap_driver_data *drv = priv; struct ieee80211_mgmt mgmt; + if (is_broadcast_ether_addr(addr)) { + /* + * New Prism2.5/3 STA firmware versions seem to have issues + * with this broadcast deauth frame. This gets the firmware in + * odd state where nothing works correctly, so let's skip + * sending this for the hostap driver. + */ + return 0; + } + memset(&mgmt, 0, sizeof(mgmt)); mgmt.frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT, WLAN_FC_STYPE_DEAUTH);