• Paolo Abeni's avatar
    ipv6: enforce egress device match in per table nexthop lookups · 48f1dcb5
    Paolo Abeni authored
    with the commit 8c14586f ("net: ipv6: Use passed in table for
    nexthop lookups"), net hop lookup is first performed on route creation
    in the passed-in table.
    However device match is not enforced in table lookup, so the found
    route can be later discarded due to egress device mismatch and no
    global lookup will be performed.
    This cause the following to fail:
    
    ip link add dummy1 type dummy
    ip link add dummy2 type dummy
    ip link set dummy1 up
    ip link set dummy2 up
    ip route add 2001:db8:8086::/48 dev dummy1 metric 20
    ip route add 2001:db8:d34d::/64 via 2001:db8:8086::2 dev dummy1 metric 20
    ip route add 2001:db8:8086::/48 dev dummy2 metric 21
    ip route add 2001:db8:d34d::/64 via 2001:db8:8086::2 dev dummy2 metric 21
    RTNETLINK answers: No route to host
    
    This change fixes the issue enforcing device lookup in
    ip6_nh_lookup_table()
    
    v1->v2: updated commit message title
    
    Fixes: 8c14586f ("net: ipv6: Use passed in table for nexthop lookups")
    Reported-and-tested-by: default avatarBeniamino Galvani <bgalvani@redhat.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    48f1dcb5
route.c 92.1 KB