+@@ -1005,6 +1005,9 @@ static int ieee80211_change_station(stru
+ }
+
+ if (params->vlan && params->vlan != sta->sdata->dev) {
++ bool prev_4addr = false;
++ bool new_4addr = false;
++
+ vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
+
+ if (vlansdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
+@@ -1020,9 +1023,25 @@ static int ieee80211_change_station(stru
+ }
+
+ rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
++ new_4addr = true;
++ }
++
++ if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
++ sta->sdata->u.vlan.sta) {
++ rcu_assign_pointer(sta->sdata->u.vlan.sta, NULL);
++ prev_4addr = true;