]> git.baikalelectronics.ru Git - kernel.git/commit
bridge: fix multicast router rlist endless loop
authorNikolay Aleksandrov <razor@blackwall.org>
Tue, 9 Jun 2015 17:23:57 +0000 (10:23 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Jun 2015 05:07:50 +0000 (22:07 -0700)
commit9907bf0ef5742f7b3b34f85bd68908ec2a41acb0
tree93a0c4478caad3c04d53170f9cd03d60fb2a5780
parent0792ab6f4525f1dfcf511fe06566bd187044a36f
bridge: fix multicast router rlist endless loop

Since the addition of sysfs multicast router support if one set
multicast_router to "2" more than once, then the port would be added to
the hlist every time and could end up linking to itself and thus causing an
endless loop for rlist walkers.
So to reproduce just do:
echo 2 > multicast_router; echo 2 > multicast_router;
in a bridge port and let some igmp traffic flow, for me it hangs up
in br_multicast_flood().
Fix this by adding a check in br_multicast_add_router() if the port is
already linked.
The reason this didn't happen before the addition of multicast_router
sysfs entries is because there's a !hlist_unhashed check that prevents
it.

Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
Fixes: abef8eeac4cb ("bridge: Add multicast_router sysfs entries")
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_multicast.c