mirror of
https://github.com/torvalds/linux.git
synced 2026-08-20 14:32:49 +02:00
Brian reported a crash in IPv6 code when using rpfilter with a setup
running FRR and external nexthop objects. The root cause of the crash
is fib6_select_path setting fib6_nh in the result to NULL because of
an improper check for nexthop objects.
More specifically, rpfilter invokes ip6_route_lookup with flowi6_oif
set causing fib6_select_path to be called with have_oif_match set.
fib6_select_path has early check on have_oif_match and jumps to the
out label which presumes a builtin fib6_nh. This path is invalid for
nexthop objects; for external nexthops fib6_select_path needs to just
return if the fib6_nh has already been set in the result otherwise it
returns after the call to nexthop_path_fib6_result. Update the check
on have_oif_match to not bail on external nexthops.
Update selftests for this problem.
Fixes:
|
||
|---|---|---|
| .. | ||
| forwarding | ||
| mptcp | ||
| .gitignore | ||
| altnames.sh | ||
| config | ||
| fcnal-test.sh | ||
| fib_nexthop_multiprefix.sh | ||
| fib_nexthops.sh | ||
| fib_rule_tests.sh | ||
| fib_tests.sh | ||
| fib-onlink-tests.sh | ||
| fin_ack_lat.c | ||
| fin_ack_lat.sh | ||
| hwtstamp_config.c | ||
| icmp_redirect.sh | ||
| in_netns.sh | ||
| ip_defrag.c | ||
| ip_defrag.sh | ||
| ip6_gre_headroom.sh | ||
| ipv6_flowlabel_mgr.c | ||
| ipv6_flowlabel.c | ||
| ipv6_flowlabel.sh | ||
| l2tp.sh | ||
| Makefile | ||
| msg_zerocopy.c | ||
| msg_zerocopy.sh | ||
| netdevice.sh | ||
| nettest.c | ||
| pmtu.sh | ||
| psock_fanout.c | ||
| psock_lib.h | ||
| psock_snd.c | ||
| psock_snd.sh | ||
| psock_tpacket.c | ||
| reuseaddr_conflict.c | ||
| reuseaddr_ports_exhausted.c | ||
| reuseaddr_ports_exhausted.sh | ||
| reuseport_addr_any.c | ||
| reuseport_addr_any.sh | ||
| reuseport_bpf_cpu.c | ||
| reuseport_bpf_numa.c | ||
| reuseport_bpf.c | ||
| reuseport_dualstack.c | ||
| route_localnet.sh | ||
| rtnetlink.sh | ||
| run_afpackettests | ||
| run_netsocktests | ||
| rxtimestamp.c | ||
| so_txtime.c | ||
| so_txtime.sh | ||
| socket.c | ||
| tcp_fastopen_backup_key.c | ||
| tcp_fastopen_backup_key.sh | ||
| tcp_inq.c | ||
| tcp_mmap.c | ||
| test_blackhole_dev.sh | ||
| test_bpf.sh | ||
| test_vxlan_fdb_changelink.sh | ||
| test_vxlan_under_vrf.sh | ||
| timestamping.c | ||
| tls.c | ||
| traceroute.sh | ||
| txring_overwrite.c | ||
| txtimestamp.c | ||
| txtimestamp.sh | ||
| udpgro_bench.sh | ||
| udpgro.sh | ||
| udpgso_bench_rx.c | ||
| udpgso_bench_tx.c | ||
| udpgso_bench.sh | ||
| udpgso.c | ||
| udpgso.sh | ||
| vrf-xfrm-tests.sh | ||
| xfrm_policy.sh | ||