linux-uconsole/tools/testing/selftests
David Ahern 0239c439ce ipv4: Fix device used for dst_alloc with local routes
[ Upstream commit b87b04f501 ]

Oliver reported a use case where deleting a VRF device can hang
waiting for the refcnt to drop to 0. The root cause is that the dst
is allocated against the VRF device but cached on the loopback
device.

The use case (added to the selftests) has an implicit VRF crossing
due to the ordering of the FIB rules (lookup local is before the
l3mdev rule, but the problem occurs even if the FIB rules are
re-ordered with local after l3mdev because the VRF table does not
have a default route to terminate the lookup). The end result is
is that the FIB lookup returns the loopback device as the nexthop,
but the ingress device is in a VRF. The mismatch causes the dst
alloc against the VRF device but then cached on the loopback.

The fix is to bring the trick used for IPv6 (see ip6_rt_get_dev_rcu):
pick the dst alloc device based the fib lookup result but with checks
that the result has a nexthop device (e.g., not an unreachable or
prohibit entry).

Fixes: f5a0aab84b ("net: ipv4: dst for local input routes should use l3mdev if relevant")
Reported-by: Oliver Herms <oliver.peter.herms@gmail.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-06-23 14:42:45 +02:00
..
android
arm64 kselftest/arm64: mte: Fix MTE feature detection 2021-05-11 14:47:18 +02:00
bpf tweewide: Fix most Shebang lines 2021-05-22 11:40:55 +02:00
breakpoints
capabilities
cgroup
clone3 selftests: clone3: use SKIP instead of XFAIL 2020-11-05 10:08:15 -07:00
core selftests: core: use SKIP instead of XFAIL in close_range_test.c 2020-11-05 10:08:15 -07:00
cpu-hotplug
cpufreq
dmabuf-heaps kselftests: dmabuf-heaps: Fix Makefile's inclusion of the kernel's usr/include dir 2021-03-04 11:38:05 +01:00
drivers tweewide: Fix most Shebang lines 2021-05-22 11:40:55 +02:00
efivarfs
exec tools/testing/selftests/exec: fix link error 2021-05-26 12:06:49 +02:00
filesystems linux-kselftest-fixes-5.10-rc3 2020-11-06 15:42:42 -08:00
firmware linux-kselftest-next-5.10-rc1 2020-10-15 15:14:32 -07:00
fpu
ftrace selftests/ftrace: Update synthetic event syntax errors 2021-03-04 11:38:07 +01:00
futex
gpio selftests/gpio: Fix build when source tree is read only 2021-06-03 09:00:31 +02:00
ia64
intel_pstate
ipc
ir
kcmp
kexec
kmod
kselftest tweewide: Fix most Shebang lines 2021-05-22 11:40:55 +02:00
kvm selftests: kvm/set_memory_region_test: Fix race in move region test 2020-12-03 12:38:58 -05:00
lib
livepatch selftests/livepatch: Do not check order when using "comm" for dmesg checking 2020-08-27 15:27:24 +02:00
lkdtm Merge branch 'work.set_fs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2020-10-22 09:59:21 -07:00
locking
media_tests
membarrier
memfd
memory-hotplug
mincore
mount selftests: mount: add nosymfollow tests 2020-08-27 16:06:47 -04:00
mqueue
net ipv4: Fix device used for dst_alloc with local routes 2021-06-23 14:42:45 +02:00
netfilter selftests: netfilter: fix current year 2021-02-17 11:02:25 +01:00
nsfs
ntb
openat2
pid_namespace
pidfd selftests: pidfd: drop needless linux/kcmp.h inclusion in pidfd_setns_test.c 2020-10-27 17:04:01 -06:00
powerpc selftests/powerpc: Fix L1D flushing tests for Power10 2021-05-19 10:12:54 +02:00
prctl
proc selftests: proc: fix warning: _GNU_SOURCE redefined 2020-11-05 10:08:14 -07:00
pstore
ptp
ptrace selftests: Add missing gitignore entries 2020-09-23 10:19:25 -06:00
rcutorture Merge branch 'scftorture.2020.08.24a' into HEAD 2020-09-03 09:47:01 -07:00
resctrl selftests/resctrl: Fix checking for < 0 for unsigned values 2021-05-11 14:47:27 +02:00
rseq rseq/selftests: Test MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ 2020-09-25 14:23:27 +02:00
rtc
safesetid
seccomp powerpc/64s/syscall: Use pt_regs.trap to distinguish syscall ABI difference between sc and scv syscalls 2021-05-26 12:06:53 +02:00
sigaltstack
size
sparc64
splice
static_keys
sync
sysctl
tc-testing net/sched: fq_pie: re-factor fix for fq_pie endless loop 2021-06-03 09:00:28 +02:00
timens selftests/timens: Add a test for futex() 2020-10-20 17:02:57 +02:00
timers selftests/timers: Turn off timeout setting 2020-08-20 15:49:28 -06:00
tmpfs
tpm2
uevent
user
vDSO
vm selftests/vm: fix out-of-tree build 2021-04-10 13:36:09 +02:00
watchdog
wireguard wireguard: selftests: make sure rp_filter is disabled on vethc 2021-06-10 13:39:24 +02:00
x86 * Misc minor cleanups and corrections to the fsgsbase code and 2020-10-12 10:44:24 -07:00
zram
.gitignore
gen_kselftest_tar.sh
kselftest.h
kselftest_deps.sh
kselftest_harness.h linux-kselftest-fixes-5.10-rc3 2020-11-06 15:42:42 -08:00
kselftest_install.sh
kselftest_module.h
lib.mk selftests: Set CC to clang in lib.mk if LLVM is set 2021-05-19 10:12:56 +02:00
Makefile selftests: Extract run_kselftest.sh and generate stand-alone test list 2020-10-07 07:58:54 -06:00
run_kselftest.sh selftests/run_kselftest.sh: fix dry-run typo 2020-12-30 11:53:07 +01:00