ipv6: enforce egress device match in per table nexthop lookups
with the commit8c14586fc3
("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:8c14586fc3
("net: ipv6: Use passed in table for nexthop lookups") Reported-and-tested-by: Beniamino Galvani <bgalvani@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Acked-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5aa3e24928
commit
48f1dcb55a
|
@ -1782,7 +1782,7 @@ static struct rt6_info *ip6_nh_lookup_table(struct net *net,
|
||||||
};
|
};
|
||||||
struct fib6_table *table;
|
struct fib6_table *table;
|
||||||
struct rt6_info *rt;
|
struct rt6_info *rt;
|
||||||
int flags = 0;
|
int flags = RT6_LOOKUP_F_IFACE;
|
||||||
|
|
||||||
table = fib6_get_table(net, cfg->fc_table);
|
table = fib6_get_table(net, cfg->fc_table);
|
||||||
if (!table)
|
if (!table)
|
||||||
|
|
Loading…
Reference in New Issue