]> git.baikalelectronics.ru Git - kernel.git/commit
fib: relax source validation check for loopback packets
authorCong Wang <xiyou.wangcong@gmail.com>
Wed, 17 Jul 2019 21:41:58 +0000 (14:41 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Jul 2019 22:23:39 +0000 (15:23 -0700)
commit3f99d940b90b90e94ff74ef56da439449c1448f4
treeca3ef80a0396f6f1ca6347f2ea8db8cfc6832197
parente801a33b9422d82a167c2617756d86a418687b3f
fib: relax source validation check for loopback packets

In a rare case where we redirect local packets from veth to lo,
these packets fail to pass the source validation when rp_filter
is turned on, as the tracing shows:

  <...>-311708 [040] ..s1 7951180.957825: fib_table_lookup: table 254 oif 0 iif 1 src 10.53.180.130 dst 10.53.180.130 tos 0 scope 0 flags 0
  <...>-311708 [040] ..s1 7951180.957826: fib_table_lookup_nh: nexthop dev eth0 oif 4 src 10.53.180.130

So, the fib table lookup returns eth0 as the nexthop even though
the packets are local and should be routed to loopback nonetheless,
but they can't pass the dev match check in fib_info_nh_uses_dev()
without this patch.

It should be safe to relax this check for this special case, as
normally packets coming out of loopback device still have skb_dst
so they won't even hit this slow path.

Cc: Julian Anastasov <ja@ssi.bg>
Cc: David Ahern <dsahern@gmail.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_frontend.c