Merge branch 'bridge-mc-fixes'
Nikolay Aleksandrov says: ==================== net: bridge: multicast: fix automatic router port marking races While working on per-vlan multicast snooping I found two race conditions when multicast snooping is enabled. They're identical and happen when the router port list is modified without the multicast lock. One requires a PIM hello message to be received on a port and the other an MRD advertisement. To fix them we just need to take the multicast_lock when adding the ports to the router port list (marking them as router ports). Tested on an affected setup by generating the required packets while modifying the port list in parallel. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d2eecc596b
|
@ -3264,7 +3264,9 @@ static void br_multicast_pim(struct net_bridge *br,
|
|||
pim_hdr_type(pimhdr) != PIM_TYPE_HELLO)
|
||||
return;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
br_ip4_multicast_mark_router(br, port);
|
||||
spin_unlock(&br->multicast_lock);
|
||||
}
|
||||
|
||||
static int br_ip4_multicast_mrd_rcv(struct net_bridge *br,
|
||||
|
@ -3275,7 +3277,9 @@ static int br_ip4_multicast_mrd_rcv(struct net_bridge *br,
|
|||
igmp_hdr(skb)->type != IGMP_MRDISC_ADV)
|
||||
return -ENOMSG;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
br_ip4_multicast_mark_router(br, port);
|
||||
spin_unlock(&br->multicast_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -3343,7 +3347,9 @@ static void br_ip6_multicast_mrd_rcv(struct net_bridge *br,
|
|||
if (icmp6_hdr(skb)->icmp6_type != ICMPV6_MRDISC_ADV)
|
||||
return;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
br_ip6_multicast_mark_router(br, port);
|
||||
spin_unlock(&br->multicast_lock);
|
||||
}
|
||||
|
||||
static int br_multicast_ipv6_rcv(struct net_bridge *br,
|
||||
|
|
Loading…
Reference in New Issue