diff options
Diffstat (limited to 'net/mac80211/mlme.c')
| -rw-r--r-- | net/mac80211/mlme.c | 15 | 
1 files changed, 7 insertions, 8 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 91d84cc77bb..a4bb856de08 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -1342,7 +1342,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,  	struct ieee80211_local *local = sdata->local;  	struct sta_info *sta;  	u32 changed = 0; -	u8 bssid[ETH_ALEN];  	ASSERT_MGD_MTX(ifmgd); @@ -1352,10 +1351,9 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,  	if (WARN_ON(!ifmgd->associated))  		return; -	memcpy(bssid, ifmgd->associated->bssid, ETH_ALEN); +	ieee80211_stop_poll(sdata);  	ifmgd->associated = NULL; -	memset(ifmgd->bssid, 0, ETH_ALEN);  	/*  	 * we need to commit the associated = NULL change because the @@ -1375,7 +1373,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,  	netif_carrier_off(sdata->dev);  	mutex_lock(&local->sta_mtx); -	sta = sta_info_get(sdata, bssid); +	sta = sta_info_get(sdata, ifmgd->bssid);  	if (sta) {  		set_sta_flag(sta, WLAN_STA_BLOCK_BA);  		ieee80211_sta_tear_down_BA_sessions(sta, tx); @@ -1384,13 +1382,16 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,  	/* deauthenticate/disassociate now */  	if (tx || frame_buf) -		ieee80211_send_deauth_disassoc(sdata, bssid, stype, reason, -					       tx, frame_buf); +		ieee80211_send_deauth_disassoc(sdata, ifmgd->bssid, stype, +					       reason, tx, frame_buf);  	/* flush out frame */  	if (tx)  		drv_flush(local, false); +	/* clear bssid only after building the needed mgmt frames */ +	memset(ifmgd->bssid, 0, ETH_ALEN); +  	/* remove AP and TDLS peers */  	sta_info_flush(local, sdata); @@ -2612,8 +2613,6 @@ static void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata,  	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;  	u8 frame_buf[DEAUTH_DISASSOC_LEN]; -	ieee80211_stop_poll(sdata); -  	ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, reason,  			       false, frame_buf);  	mutex_unlock(&ifmgd->mtx);  |