• Nikolay Aleksandrov's avatar
    bridge: fix multicast router rlist endless loop · 501e81d5
    Nikolay Aleksandrov authored
    commit 1a040eac upstream.
    
    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>
    [lizf: Backported to 3.4: adjust context]
    Signed-off-by: default avatarZefan Li <lizefan@huawei.com>
    501e81d5
br_multicast.c 38.5 KB