changed[link_id] |= ieee80211_link_set_associated(link, cbss);
        }
 
-       memcpy(sdata->vif.cfg.ap_addr, assoc_data->ap_addr, ETH_ALEN);
-
        /* just to be sure */
        ieee80211_stop_poll(sdata);
 
        sta->sta.wme = (elems->wmm_param || elems->s1g_capab) &&
                       local->hw.queues >= IEEE80211_NUM_ACS;
 
+       /* needed for fast-xmit setup in sta_info_move_state() */
+       memcpy(sdata->vif.cfg.ap_addr, assoc_data->ap_addr, ETH_ALEN);
+
        err = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
        if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
                err = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED);
 
        return true;
 out_err:
+       eth_zero_addr(sdata->vif.cfg.ap_addr);
        mutex_unlock(&sdata->local->sta_mtx);
        return false;
 }
 
                } else {
                        fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
                        /* BSSID SA DA */
-                       memcpy(hdr.addr1, sdata->deflink.u.mgd.bssid, ETH_ALEN);
+                       memcpy(hdr.addr1, sdata->vif.cfg.ap_addr, ETH_ALEN);
                        memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
                        memcpy(hdr.addr3, skb->data, ETH_ALEN);
                        hdrlen = 24;
                }
                fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
                /* BSSID SA DA */
-               memcpy(hdr->addr1, sdata->deflink.u.mgd.bssid, ETH_ALEN);
+               memcpy(hdr->addr1, sdata->vif.cfg.ap_addr, ETH_ALEN);
                build.da_offs = offsetof(struct ieee80211_hdr, addr3);
                build.sa_offs = offsetof(struct ieee80211_hdr, addr2);
                build.hdr_len = 24;
         */
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_STATION:
-               bssid = sdata->deflink.u.mgd.bssid;
+               bssid = sdata->vif.cfg.ap_addr;
                break;
        case NL80211_IFTYPE_AP:
        case NL80211_IFTYPE_AP_VLAN: