mirror-linux/tools/testing/selftests/net
Davide Caratti 4c8fc3fe28 act_mirred: use the backlog for nested calls to mirred ingress
[ Upstream commit ca22da2fbd ]

William reports kernel soft-lockups on some OVS topologies when TC mirred
egress->ingress action is hit by local TCP traffic [1].
The same can also be reproduced with SCTP (thanks Xin for verifying), when
client and server reach themselves through mirred egress to ingress, and
one of the two peers sends a "heartbeat" packet (from within a timer).

Enqueueing to backlog proved to fix this soft lockup; however, as Cong
noticed [2], we should preserve - when possible - the current mirred
behavior that counts as "overlimits" any eventual packet drop subsequent to
the mirred forwarding action [3]. A compromise solution might use the
backlog only when tcf_mirred_act() has a nest level greater than one:
change tcf_mirred_forward() accordingly.

Also, add a kselftest that can reproduce the lockup and verifies TC mirred
ability to account for further packet drops after TC mirred egress->ingress
(when the nest level is 1).

 [1] https://lore.kernel.org/netdev/33dc43f587ec1388ba456b4915c75f02a8aae226.1663945716.git.dcaratti@redhat.com/
 [2] https://lore.kernel.org/netdev/Y0w%2FWWY60gqrtGLp@pop-os.localdomain/
 [3] such behavior is not guaranteed: for example, if RPS or skb RX
     timestamping is enabled on the mirred target device, the kernel
     can defer receiving the skb and return NET_RX_SUCCESS inside
     tcf_mirred_forward().

Reported-by: William Zhao <wizhao@redhat.com>
CC: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-03-30 12:49:20 +02:00
..
af_unix af_unix: selftest: Fix the size of the parameter to connect() 2023-01-18 11:58:27 +01:00
bpf selftests net: fix kselftest net fatal error 2022-06-29 20:15:57 -07:00
forwarding act_mirred: use the backlog for nested calls to mirred ingress 2023-03-30 12:49:20 +02:00
mptcp selftests: mptcp: userspace: fix v4-v6 test in v6.1 2023-02-22 12:59:45 +01:00
openvswitch selftests: add openvswitch selftest suite 2022-10-27 12:31:24 +02:00
.gitignore af_unix: Add test for sock_diag and UDIAG_SHOW_UID. 2022-12-01 10:32:20 +01:00
Makefile selftests: add selftest for chaining of tc ingress handling to egress 2022-10-19 14:04:36 +01:00
altnames.sh
amt.sh selftests: set amt.sh executable 2022-01-05 10:27:19 -08:00
arp_ndisc_evict_nocarrier.sh selftests: net: return non-zero for failures reported in arp_ndisc_evict_nocarrier 2023-01-12 12:02:22 +01:00
arp_ndisc_untracked_subnets.sh selftests: net: arp_ndisc_untracked_subnets: test for arp_accept and accept_untracked_na 2022-07-15 18:55:50 -07:00
bareudp.sh
bind_bhash.c selftests/net: Add test for timing a bind request to a port with a populated bhash entry 2022-08-24 19:30:09 -07:00
bind_bhash.sh selftests/net: Add test for timing a bind request to a port with a populated bhash entry 2022-08-24 19:30:09 -07:00
cmsg_ipv6.sh selftest: net: Improve IPV6_TCLASS/IPV6_HOPLIMIT tests apparmor compatibility 2023-02-22 12:59:42 +01:00
cmsg_sender.c selftests: net: fix cmsg_so_mark.sh test hang 2023-01-24 07:24:31 +01:00
cmsg_so_mark.sh selftests: net: cmsg_so_mark: test with SO_MARK set by setsockopt 2022-02-10 15:04:51 +00:00
cmsg_time.sh selftests: net: test standard socket cmsgs across UDP and ICMP sockets 2022-02-10 15:04:52 +00:00
config selftests/tls: Fix tls selftests dependency to correct algorithm 2022-12-02 20:48:47 -08:00
devlink_port_split.py selftests: net: devlink_port_split.py: skip test if no suitable device available 2023-03-22 13:33:50 +01:00
drop_monitor_tests.sh
fcnal-test.sh selftests/net: Find nettest in current directory 2022-11-21 12:58:26 +00:00
fib-onlink-tests.sh
fib_nexthop_multiprefix.sh
fib_nexthop_nongw.sh selftests/net: test nexthop without gw 2022-07-14 14:41:19 +02:00
fib_nexthops.sh ipv4: Fix route deletion when nexthop info is not specified 2022-11-28 16:56:04 -08:00
fib_rule_tests.sh selftests: net: fib_rule_tests: fix support for running individual tests 2022-07-01 13:37:13 +01:00
fib_tests.sh selftest: fib_tests: Always cleanup before exit 2023-03-10 09:33:08 +01:00
fin_ack_lat.c
fin_ack_lat.sh
gre_gso.sh selftests: net: switch to socat in the GSO GRE test 2021-11-12 19:59:01 -08:00
gro.c Networking changes for 5.17. 2022-01-10 19:06:09 -08:00
gro.sh
hwtstamp_config.c
icmp.sh
icmp_redirect.sh selftests: icmp_redirect: pass xfail=0 to log_test() 2021-12-12 12:56:41 +00:00
in_netns.sh
io_uring_zerocopy_tx.c selftest/net: adjust io_uring sendzc notif handling 2022-09-23 14:57:27 -06:00
io_uring_zerocopy_tx.sh selftests/net: don't tests batched TCP io_uring zc 2022-11-02 08:27:24 -06:00
ioam6.sh selftests: net: fix IOAM test skip return code 2022-08-02 09:51:31 +02:00
ioam6_parser.c selftests: net: ioam: expect support for Queue depth data 2022-01-21 19:26:39 -08:00
ip6_gre_headroom.sh
ip_defrag.c
ip_defrag.sh
ipsec.c selftests/net: Refactor xfrm_fill_key() to use array of structs 2022-08-16 11:28:13 +02:00
ipv6_flowlabel.c ping: support ipv6 ping socket flow labels 2022-07-22 12:40:27 +01:00
ipv6_flowlabel.sh ping: support ipv6 ping socket flow labels 2022-07-22 12:40:27 +01:00
ipv6_flowlabel_mgr.c
l2_tos_ttl_inherit.sh selftests/net: l2_tos_ttl_inherit.sh: Ensure environment cleanup on failure. 2023-01-18 11:58:31 +01:00
l2tp.sh
msg_zerocopy.c
msg_zerocopy.sh
ndisc_unsolicited_na_test.sh net/ipv6: Expand and rename accept_unsolicited_na to accept_untracked_na 2022-05-31 11:36:57 +02:00
netdevice.sh
nettest.c net-next: Fix IP_UNICAST_IF option behavior for connected sockets 2022-08-31 19:51:06 -07:00
pmtu.sh selftests/net: Find nettest in current directory 2022-11-21 12:58:26 +00:00
psock_fanout.c selftests: net: fix array_size.cocci warning 2022-03-17 15:21:16 +01:00
psock_lib.h
psock_snd.c selftests/net: enable lo.accept_local in psock_snd test 2022-05-25 21:58:35 -07:00
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.c selftests: Fix the if conditions of in test_extra_filter() 2022-09-27 11:00:02 +02:00
reuseport_bpf_cpu.c
reuseport_bpf_numa.c selftests: net: fix array_size.cocci warning 2022-03-07 12:23:27 +00:00
reuseport_dualstack.c
route_localnet.sh
rtnetlink.sh selftests: rtnetlink: correct xfrm policy rule in kci_test_ipsec_offload 2022-12-02 20:49:30 -08:00
run_afpackettests
run_netsocktests
rxtimestamp.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
rxtimestamp.sh
settings kselftests/net: adapt the timeout to the largest runtime 2022-01-13 12:53:22 +00:00
setup_loopback.sh
setup_veth.sh
sk_bind_sendto_listen.c selftests/net: Add sk_bind_sendto_listen and sk_connect_zero_addr 2022-08-24 19:30:09 -07:00
sk_connect_zero_addr.c selftests/net: Add sk_bind_sendto_listen and sk_connect_zero_addr 2022-08-24 19:30:09 -07:00
so_netns_cookie.c
so_txtime.c selftests/net: so_txtime: usage(): fix documentation of default clock 2022-05-03 13:18:26 +02:00
so_txtime.sh
socket.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
srv6_end_dt4_l3vpn_test.sh
srv6_end_dt6_l3vpn_test.sh
srv6_end_dt46_l3vpn_test.sh
srv6_end_next_csid_l3vpn_test.sh selftests: seg6: add selftest for NEXT-C-SID flavor in SRv6 End behavior 2022-09-20 12:33:22 +02:00
srv6_hencap_red_l3vpn_test.sh selftests: seg6: add selftest for SRv6 H.Encaps.Red behavior 2022-07-29 12:14:03 +01:00
srv6_hl2encap_red_l2vpn_test.sh selftests: seg6: add selftest for SRv6 H.L2Encaps.Red behavior 2022-07-29 12:14:03 +01:00
stress_reuseport_listen.c net: selftests: Stress reuseport listen 2022-05-12 16:52:18 -07:00
stress_reuseport_listen.sh net: selftests: Stress reuseport listen 2022-05-12 16:52:18 -07:00
tap.c selftests: add few test cases for tap driver 2022-08-05 08:59:15 +01:00
tcp_fastopen_backup_key.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
tcp_fastopen_backup_key.sh
tcp_inq.c
tcp_mmap.c
test_blackhole_dev.sh
test_bpf.sh
test_ingress_egress_chaining.sh selftests: add selftest for chaining of tc ingress handling to egress 2022-10-19 14:04:36 +01:00
test_vxlan_fdb_changelink.sh
test_vxlan_under_vrf.sh selftests: test_vxlan_under_vrf: Fix broken test case 2022-03-25 17:00:11 -07:00
test_vxlan_vnifiltering.sh selftests: Fix failing VXLAN VNI filtering test 2023-02-14 19:11:48 +01:00
timestamping.c selftests/net: timestamping: Fix bind_phc check 2022-01-31 11:44:04 +00:00
tls.c selftests: tls: handful of memrnd() and length checks 2022-07-28 21:49:59 -07:00
toeplitz.c selftests/net: toeplitz: fix race on tpacket_v3 block close 2023-02-01 08:34:26 +01:00
toeplitz.sh selftests: net: Use "grep -E" instead of "egrep" 2022-12-02 20:56:41 -08:00
toeplitz_client.sh
traceroute.sh
tun.c selftest: tun: add test for NAPI dismantle 2022-06-30 11:34:10 -07:00
txring_overwrite.c
txtimestamp.c selftests: net: change fprintf format specifiers 2022-03-21 16:37:54 -07:00
txtimestamp.sh
udpgro.sh selftests/net: fix missing xdp_dummy 2022-11-18 12:01:14 +00:00
udpgro_bench.sh selftests/net: fix missing xdp_dummy 2022-11-18 12:01:14 +00:00
udpgro_frglist.sh selftests/net: fix missing xdp_dummy 2022-11-18 12:01:14 +00:00
udpgro_fwd.sh selftests/net: fix missing xdp_dummy 2022-11-18 12:01:14 +00:00
udpgso.c selftests: Calculate udpgso segment count without header adjustment 2021-12-23 19:20:06 -08:00
udpgso.sh
udpgso_bench.sh selftests: net: udpgso_bench: Fix racing bug between the rx/tx programs 2023-02-09 11:28:10 +01:00
udpgso_bench_rx.c selftests/net: Interpret UDP_GRO cmsg data as an int value 2023-03-10 09:33:07 +01:00
udpgso_bench_tx.c selftests: net: udpgso_bench_tx: Cater for pending datagrams zerocopy benchmarking 2023-02-09 11:28:11 +01:00
unicast_extensions.sh
veth.sh selftests/net: fix missing xdp_dummy 2022-11-18 12:01:14 +00:00
vrf-xfrm-tests.sh
vrf_route_leaking.sh
vrf_strict_mode_test.sh selftests: net: vrf_strict_mode_test: add support to select a test to run 2022-05-02 10:48:29 +02:00
xfrm_policy.sh