Skip to content
  • Herton Ronaldo Krzesinski's avatar
    mac80211: deauth before flushing STA information · 1a28c78b
    Herton Ronaldo Krzesinski authored
    Even after commit "mac80211: deauth when interface is marked down"
    (e327b847 on Linus tree), userspace still isn't notified when interface
    goes down. There isn't a problem with this commit, but because of other
    code changes it doesn't work on kernels >= 2.6.28 (works if same/similar
    change applied on 2.6.27 for example).
    
    The issue is as follows: after commit "mac80211: restructure disassoc/deauth
    flows" in 2.6.28, the call to ieee80211_sta_deauthenticate added by
    commit e327b847
    
     will not work: because we do sta_info_flush(local, sdata)
    inside ieee80211_stop (iface.c), all stations in interface are cleared, so
    when calling ieee80211_sta_deauthenticate->ieee80211_set_disassoc (mlme.c),
    inside ieee80211_set_disassoc we have this in the beginning:
    
             sta = sta_info_get(local, ifsta->bssid);
             if (!sta) {
    
    The !sta check triggers, thus the function returns early and
    ieee80211_sta_send_apinfo(sdata, ifsta) later isn't called, so
    wpa_supplicant/userspace isn't notified with SIOCGIWAP.
    
    This commit moves deauthentication to before flushing STA info
    (sta_info_flush), thus the above can't happen and userspace is really
    notified when interface goes down.
    
    Signed-off-by: default avatarHerton Ronaldo Krzesinski <herton@mandriva.com.br>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    1a28c78b