mac80211: fix managed mode channel flags handling
[linux-block.git] / net / mac80211 / mlme.c
index 6d49d6c4ffc1177721712a259d331a15d11e8036..2cec14cc02d175f52cef0117a7688f15d1b4b80f 100644 (file)
@@ -1528,8 +1528,6 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
        changed |= BSS_CHANGED_BSSID | BSS_CHANGED_HT;
        ieee80211_bss_info_change_notify(sdata, changed);
 
-       ieee80211_vif_release_channel(sdata);
-
        /* disassociated - set to defaults now */
        ieee80211_set_wmm_default(sdata, false);
 
@@ -1539,6 +1537,9 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
        del_timer_sync(&sdata->u.mgd.chswitch_timer);
 
        sdata->u.mgd.timers_running = 0;
+
+       ifmgd->flags = 0;
+       ieee80211_vif_release_channel(sdata);
 }
 
 void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
@@ -1864,6 +1865,7 @@ static void ieee80211_destroy_auth_data(struct ieee80211_sub_if_data *sdata,
 
                memset(sdata->u.mgd.bssid, 0, ETH_ALEN);
                ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BSSID);
+               sdata->u.mgd.flags = 0;
                ieee80211_vif_release_channel(sdata);
        }
 
@@ -2106,6 +2108,7 @@ static void ieee80211_destroy_assoc_data(struct ieee80211_sub_if_data *sdata,
 
                memset(sdata->u.mgd.bssid, 0, ETH_ALEN);
                ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BSSID);
+               sdata->u.mgd.flags = 0;
                ieee80211_vif_release_channel(sdata);
        }
 
@@ -3536,13 +3539,6 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
 
        /* prepare assoc data */
        
-       /*
-        * keep only the 40 MHz disable bit set as it might have
-        * been set during authentication already, all other bits
-        * should be reset for a new connection
-        */
-       ifmgd->flags &= IEEE80211_STA_DISABLE_40MHZ;
-
        ifmgd->beacon_crc_valid = false;
 
        /*