mac80211: fix handling of 4-address-mode in ieee80211_change_iface
authorFelix Fietkau <nbd@openwrt.org>
Mon, 26 Apr 2010 22:26:34 +0000 (00:26 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 27 Apr 2010 20:09:16 +0000 (16:09 -0400)
A misplaced interface type check bails out too early if the interface
is not in monitor mode. This patch moves it to the right place, so that
it only covers changes to the monitor flags.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/cfg.c

index f97dda735cbb2c531a35718f9a0e5cc53ef5b72d..592f07d2ae5cab8c098230fe5edf7a47b36b1c75 100644 (file)
@@ -96,9 +96,6 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
                                            params->mesh_id_len,
                                            params->mesh_id);
 
-       if (sdata->vif.type != NL80211_IFTYPE_MONITOR || !flags)
-               return 0;
-
        if (type == NL80211_IFTYPE_AP_VLAN &&
            params && params->use_4addr == 0)
                rcu_assign_pointer(sdata->u.vlan.sta, NULL);
@@ -106,7 +103,9 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
                 params && params->use_4addr >= 0)
                sdata->u.mgd.use_4addr = params->use_4addr;
 
-       sdata->u.mntr_flags = *flags;
+       if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags)
+               sdata->u.mntr_flags = *flags;
+
        return 0;
 }