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

Jouni Malinen j at w1.fi
Sat Sep 17 12:04:47 PDT 2016

On Tue, Aug 16, 2016 at 10:43:44AM +0530, Jithu Jance wrote:
> 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.

Hmm.. That does indeed seem to be the case, but it should be noted that
there is a difference in calling hostapd_drv_sta_remove() and
hostapd_drv_sta_deauth(): the former does not pass the reason code to
the driver wrapper while the latter does.

> diff --git 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 &
>  		hostapd_drv_sta_deauth(hapd, addr, reason);
>  	if (sta == NULL)

This is the former case and if this is made conditional, all drivers
that do not set WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS would lose the reason
code when they get only the second call from ap_sta_remove(). I don't
think this is acceptable.

In addition, the sta == NULL case would return from ap_sta_disconnect()
without even registering the ap_sta_disassoc_cb_timeout() callback at
all. That does not sound correct either, i.e., this condition on
skipping the hostapd_drv_sta_deauth() call should likely apply only if
sta != NULL.

For the reason code disappearing issue, one could consider extending
hostapd_drv_sta_remove() support passing a reason code to the driver,
but I'm not really sure this is the correct thing to do.. In other
words, I think I'd rather leave this as-is.

Other than debug logs showing some warnings, are there any real issues
noticeable by external devices that this patch is fixing?
Jouni Malinen                                            PGP id EFC895FA

More information about the Hostap mailing list