diff options
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r-- | net/wireless/nl80211.c | 12 |
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 | ||
971 | static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev, | 971 | static 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 | } |