struct ath_rate_table;
 
 struct ath9k_vif_iter_data {
-       const u8 *hw_macaddr; /* phy's hardware address, set
-                              * before starting iteration for
-                              * valid bssid mask.
-                              */
+       u8 hw_macaddr[ETH_ALEN]; /* address of the first vif */
        u8 mask[ETH_ALEN]; /* bssid mask */
+       bool has_hw_macaddr;
+
        int naps;      /* number of AP vifs */
        int nmeshes;   /* number of mesh vifs */
        int nstations; /* number of station vifs */
 
        struct ath9k_vif_iter_data *iter_data = data;
        int i;
 
-       if (iter_data->hw_macaddr)
+       if (iter_data->has_hw_macaddr) {
                for (i = 0; i < ETH_ALEN; i++)
                        iter_data->mask[i] &=
                                ~(iter_data->hw_macaddr[i] ^ mac[i]);
+       } else {
+               memcpy(iter_data->hw_macaddr, mac, ETH_ALEN);
+               iter_data->has_hw_macaddr = true;
+       }
 
        switch (vif->type) {
        case NL80211_IFTYPE_AP:
         * together with the BSSID mask when matching addresses.
         */
        memset(iter_data, 0, sizeof(*iter_data));
-       iter_data->hw_macaddr = common->macaddr;
        memset(&iter_data->mask, 0xff, ETH_ALEN);
 
        if (vif)
        ieee80211_iterate_active_interfaces_atomic(
                sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
                ath9k_vif_iter, iter_data);
+
+       memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN);
 }
 
 /* Called with sc->mutex held. */