mirror of
https://github.com/torvalds/linux.git
synced 2025-11-05 03:00:13 +02:00
net: Fix nexthop lookups
Andreas reported breakage adding routes with local nexthops: $ ip route show table main ... 172.28.0.0/24 dev vnf-xe1p0 proto kernel scope link src 172.28.0.16 $ ip route add 10.0.0.0/8 via 172.28.0.32 table 100 dev vnf-xe1p0 RTNETLINK answers: Resource temporarily unavailable3bfd847203changed the lookup to use the passed in table but for cases like this the nexthop is in the local table rather than the passed in table. Fixes:3bfd847203("net: Use passed in table for nexthop lookups") Reported-by: Andreas Schultz <aschultz@tpip.net> Signed-off-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eb4cb85180
commit
4c9bcd1179
1 changed files with 8 additions and 1 deletions
|
|
@ -712,9 +712,16 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
|
||||||
err = fib_table_lookup(tbl, &fl4, &res,
|
err = fib_table_lookup(tbl, &fl4, &res,
|
||||||
FIB_LOOKUP_IGNORE_LINKSTATE |
|
FIB_LOOKUP_IGNORE_LINKSTATE |
|
||||||
FIB_LOOKUP_NOREF);
|
FIB_LOOKUP_NOREF);
|
||||||
else
|
|
||||||
|
/* on error or if no table given do full lookup. This
|
||||||
|
* is needed for example when nexthops are in the local
|
||||||
|
* table rather than the given table
|
||||||
|
*/
|
||||||
|
if (!tbl || err) {
|
||||||
err = fib_lookup(net, &fl4, &res,
|
err = fib_lookup(net, &fl4, &res,
|
||||||
FIB_LOOKUP_IGNORE_LINKSTATE);
|
FIB_LOOKUP_IGNORE_LINKSTATE);
|
||||||
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return err;
|
return err;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue