summaryrefslogtreecommitdiffstats
path: root/net/8021q/vlan.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2007-07-15 03:52:56 +0200
committerDavid S. Miller <davem@davemloft.net>2007-07-15 03:52:56 +0200
commit6c78dcbd47a68a7d25d2bee7a6c74b9136cb5fde (patch)
tree21e4a2ea3eb7ed87ce525c59bb8c4d23d8c84589 /net/8021q/vlan.c
parent[NET]: dev_mcast: add multicast list synchronization helpers (diff)
downloadlinux-6c78dcbd47a68a7d25d2bee7a6c74b9136cb5fde.tar.xz
linux-6c78dcbd47a68a7d25d2bee7a6c74b9136cb5fde.zip
[VLAN]: Fix promiscous/allmulti synchronization races
The set_multicast_list function may be called without holding the rtnl mutex, resulting in races when changing the underlying device's promiscous and allmulti state. Use the change_rx_mode hook, which is always invoked under the rtnl. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q/vlan.c')
-rw-r--r--net/8021q/vlan.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index abb9900edb3f..39bdcc25c150 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -373,6 +373,7 @@ void vlan_setup(struct net_device *new_dev)
new_dev->open = vlan_dev_open;
new_dev->stop = vlan_dev_stop;
new_dev->set_multicast_list = vlan_dev_set_multicast_list;
+ new_dev->change_rx_flags = vlan_change_rx_flags;
new_dev->destructor = free_netdev;
new_dev->do_ioctl = vlan_dev_ioctl;