• Nikolay Aleksandrov's avatar
    bridge: fix multicast router rlist endless loop · 1a040eac
    Nikolay Aleksandrov authored
    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: default avatarNikolay Aleksandrov <razor@blackwall.org>
    Fixes: 0909e117 ("bridge: Add multicast_router sysfs entries")
    Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1a040eac
br_multicast.c 51.1 KB