diff options
author | Patrick McHardy <kaber@trash.net> | 2007-07-14 21:52:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-07-14 21:52:56 -0400 |
commit | 6c78dcbd47a68a7d25d2bee7a6c74b9136cb5fde (patch) | |
tree | 21e4a2ea3eb7ed87ce525c59bb8c4d23d8c84589 /net/8021q/vlan.c | |
parent | a0a400d79e3dd7843e7e81baa3ef2957bdc292d0 (diff) |
[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.c | 1 |
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) | |||
373 | new_dev->open = vlan_dev_open; | 373 | new_dev->open = vlan_dev_open; |
374 | new_dev->stop = vlan_dev_stop; | 374 | new_dev->stop = vlan_dev_stop; |
375 | new_dev->set_multicast_list = vlan_dev_set_multicast_list; | 375 | new_dev->set_multicast_list = vlan_dev_set_multicast_list; |
376 | new_dev->change_rx_flags = vlan_change_rx_flags; | ||
376 | new_dev->destructor = free_netdev; | 377 | new_dev->destructor = free_netdev; |
377 | new_dev->do_ioctl = vlan_dev_ioctl; | 378 | new_dev->do_ioctl = vlan_dev_ioctl; |
378 | 379 | ||