aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index b7b0f67b0c61..149539ade15e 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -969,10 +969,14 @@ static int parse_monitor_flags(struct nlattr *nla, u32 *mntrflags)
969} 969}
970 970
971static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev, 971static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev,
972 u8 use_4addr, enum nl80211_iftype iftype) 972 struct net_device *netdev, u8 use_4addr,
973 enum nl80211_iftype iftype)
973{ 974{
974 if (!use_4addr) 975 if (!use_4addr) {
976 if (netdev && netdev->br_port)
977 return -EBUSY;
975 return 0; 978 return 0;
979 }
976 980
977 switch (iftype) { 981 switch (iftype) {
978 case NL80211_IFTYPE_AP_VLAN: 982 case NL80211_IFTYPE_AP_VLAN:
@@ -1033,7 +1037,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
1033 if (info->attrs[NL80211_ATTR_4ADDR]) { 1037 if (info->attrs[NL80211_ATTR_4ADDR]) {
1034 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); 1038 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
1035 change = true; 1039 change = true;
1036 err = nl80211_valid_4addr(rdev, params.use_4addr, ntype); 1040 err = nl80211_valid_4addr(rdev, dev, params.use_4addr, ntype);
1037 if (err) 1041 if (err)
1038 goto unlock; 1042 goto unlock;
1039 } else { 1043 } else {
@@ -1111,7 +1115,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
1111 1115
1112 if (info->attrs[NL80211_ATTR_4ADDR]) { 1116 if (info->attrs[NL80211_ATTR_4ADDR]) {
1113 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); 1117 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
1114 err = nl80211_valid_4addr(rdev, params.use_4addr, type); 1118 err = nl80211_valid_4addr(rdev, NULL, params.use_4addr, type);
1115 if (err) 1119 if (err)
1116 goto unlock; 1120 goto unlock;
1117 } 1121 }