Skip to content

Commit

Permalink
Merge branch 'bridge-mc-fixes'
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
davem330 committed Jul 11, 2021
2 parents a5de4be + 000b728 commit d2eecc5
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions net/bridge/br_multicast.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
}
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit d2eecc5

Please sign in to comment.