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.h | |
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.h')
-rw-r--r-- | net/8021q/vlan.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 62ce1c519aab..7df5b2935579 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
@@ -69,6 +69,7 @@ int vlan_dev_set_vlan_flag(const struct net_device *dev, | |||
69 | u32 flag, short flag_val); | 69 | u32 flag, short flag_val); |
70 | void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); | 70 | void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); |
71 | void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result); | 71 | void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result); |
72 | void vlan_change_rx_flags(struct net_device *dev, int change); | ||
72 | void vlan_dev_set_multicast_list(struct net_device *vlan_dev); | 73 | void vlan_dev_set_multicast_list(struct net_device *vlan_dev); |
73 | 74 | ||
74 | int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id); | 75 | int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id); |