All of lore.kernel.org
 help / color / mirror / Atom feed
From: netdev-bot+sashiko@kernel.org
To: pablo@netfilter.org
Cc: netfilter-devel@vger.kernel.org, davem@davemloft.net,
	netdev@vger.kernel.org, kuba@kernel.org, pabeni@redhat.com,
	edumazet@kernel.org, horms@kernel.org, fw@strlen.de, ja@ssi.bg
Subject: Re: [PATCH net-next 05/15] selftests: netfilter: nft_queue: check the scope of the hook drop flush
Date: Mon, 19 Oct 2026 01:21:23 +0000	[thread overview]
Message-ID: <179237288374.3135.9473018103688224106@kernel.org> (raw)
In-Reply-To: <20261018005638.1776148-6-pablo@netfilter.org>

Thank you for your contribution! Sashiko AI review found 4 potential
issue(s) to consider.

Critical: 0 · High: 0 · Medium: 1 · Low: 3

If you believe none of the issues are legitimate, please reply to each
issue of Medium severity or higher and explain why the AI is wrong.
If any of them are legitimate and you plan to respin, please let patchwork
know by including "pw-bot: cr" as a separate line at the end of your reply
(one such reply per series is enough).

- [Medium] The new test's failure does not reach the script's exit
  status.
- [Low] The 'keep' case cannot tell the two halves of nf_hook_cmp()
  apart.
- [Low] In hook_drop_case() the exit status of the command under test,
  `ip netns exec "$ns1" nft "$@"` (line 932), is never checked, and the…
- [Low] hook_drop_case() ignores the return value of `busywait
  "$BUSYWAIT_TIMEOUT" hook_drop_all_queued "$packets"` (line 930).

--

selftests: netfilter: nft_queue: check the scope of the hook drop flush

This adds test_hook_drop_scope to nft_queue.sh. The test queues 20 UDP
packets to the nf_queue helper, which holds the verdicts, and deletes a
base chain while the packets wait. It then checks whether the packets
were kept or dropped. It also adds a -H option to nf_queue that holds
verdicts until SIGUSR1 is received.

> diff --git a/tools/testing/selftests/net/netfilter/nft_queue.sh b/tools/testing/selftests/net/netfilter/nft_queue.sh
> index c8d1f2eb41339..a07652813a4b0 100755
> --- a/tools/testing/selftests/net/netfilter/nft_queue.sh
> +++ b/tools/testing/selftests/net/netfilter/nft_queue.sh

[ ... ]

> +hook_drop_case()
> +{

[ ... ]

> +	ip netns exec "$ns1" bash -c \
> +		"for i in \$(seq $packets); do echo x > /dev/udp/127.0.0.1/12345; done"
> +
> +	busywait "$BUSYWAIT_TIMEOUT" hook_drop_all_queued "$packets"

[Severity: Low]
What happens if this busywait times out? On timeout, loopy_wait() in
lib.sh just returns 1. It does not abort the caller:

tools/testing/selftests/net/lib.sh:loopy_wait() {
    ...
		if ((current_time - start_time > timeout_ms)); then
			echo -n "$out"
			return 1
		fi
    ...
}

The return value is ignored here. So the test still deletes the chain
and classifies the result when fewer than 20 packets were queued, for
example when some of the sends were lost before they reached the queue.

The drop classification further down only checks for zero:

	elif [ "$queued" = "0" ] && [ "$delivered" = "0" ]; then
		result="drop"

Could the drop case then report PASS with only part of the batch queued,
or with nothing queued at all? In the keep case the same situation
would be reported as inconsistent.

> +
> +	ip netns exec "$ns1" nft "$@"
> +	queued=$(hook_drop_queued)

[Severity: Low]
Should the exit status of this nft command be checked?

Suppose the deletion fails, or test_hook_drop_scope() passes the wrong
arguments. Then no hook is unregistered and the 20 packets stay queued.
SIGUSR1 releases them, the input counter reaches 20 and nf_queue prints
"20 packets total". The keep case would report PASS even though no
chain was deleted.

Other deletions in this file do check the result, for example in
test_udp_gro_ct():

	if ! ip netns exec "$nsrouter" nft delete table inet udpq; then
		echo "FAIL: Could not delete udpq table"
		ret=1

[ ... ]

> +test_hook_drop_scope()
> +{
> +	# the hook array of another hook point changes, queued packets stay
> +	hook_drop_case keep "base chain removed at another hook point" \
> +		delete chain ip6 unrelated prerouting

[Severity: Low]
Does this keep case test the hook number check and the family check in
nf_hook_cmp() separately? The queued packets are IPv4 (sent to
127.0.0.1) at NF_INET_LOCAL_OUT. The deleted chain differs from them in
both family (ip6) and hook (prerouting):

net/netfilter/nfnetlink_queue.c:nf_hook_cmp() {
    ...
	if (entry->state.hook != hooknum)
		return 0;

	if (pf == NFPROTO_INET)
		return entry->state.pf == NFPROTO_IPV4 ||
		       entry->state.pf == NFPROTO_IPV6;

	return entry->state.pf == pf;
}

If nf_hook_cmp() compared only the hook number, or only the family, it
would still keep the entries and this case would pass. The drop case
matches on both fields, so it doesn't isolate either check.

Would it make sense to add a chain at the same hook in another family
(for example ip6 output)? A chain at another hook in the same family
(for example ip prerouting) would cover the other check.

The testing notes of the previous patch, "netfilter: nf_queue: limit the
hook drop flush to the unregistered hook point", say that deleting an
ip6 table with an output base chain does not drop the packets. That
case isn't encoded in this test.

[ ... ]

> @@ -909,6 +1016,7 @@ test_queue_stress
>  # should be last, adds vrf device in ns1 and changes routes
>  test_icmp_vrf
>  test_queue_removal
> +test_hook_drop_scope
>  
>  # turns router into a bridge
>  test_queue_bridge

[Severity: Medium]
Does a failure in test_hook_drop_scope() reach the exit status of the
script? hook_drop_case() records a failure only by setting the global
ret=1.

test_queue_bridge runs afterwards and calls test_queue() twice.
test_queue() does this:

tools/testing/selftests/net/netfilter/nft_queue.sh:test_queue() {
    ...
	wait
	ret=$?
    ...
}

A bare wait returns 0, so ret is reset to 0 whenever the bridge tests
pass. The script then reports success with exit $ret.

The FAIL line still goes to stderr, but kselftest runners decide pass
or fail from the exit code. The same reset already affects the earlier
tests in this sequence.

-- 
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261018005638.1776148-2-pablo%40netfilter.org

  reply	other threads:[~2026-10-19  1:21 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-18  0:56 [PATCH net-next 00/15] Netfilter updates for net-next Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 01/15] netfilter: disable br_netfilter in user namespaces Pablo Neira Ayuso
2026-10-18  1:03   ` netdev-bot+sinfo
2026-10-18  1:20     ` Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  9:15     ` Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 02/15] selftests: netfilter: nft_queue.sh: only queue icmp echo request/reply Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  4:23     ` Florian Westphal
2026-10-19  9:12     ` Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 03/15] ipvs: fix buffer overflow when sending sync messages Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 04/15] netfilter: nf_queue: limit the hook drop flush to the unregistered hook point Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  4:49     ` Florian Westphal
2026-10-19  9:18       ` Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 05/15] selftests: netfilter: nft_queue: check the scope of the hook drop flush Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko [this message]
2026-10-19  4:54     ` Florian Westphal
2026-10-18  0:56 ` [PATCH net-next 06/15] netfilter: conntrack: fix unlikely UaF in gc worker Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 07/15] netfilter: nf_tables: switch chain_types array to rcu Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  5:00     ` Florian Westphal
2026-10-18  0:56 ` [PATCH net-next 08/15] netfilter: nft_exthdr: remove redundant op parsing in tcp_set_init Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 09/15] netfilter: nft_exthdr: avoid 60 bytes stack buffer in TCP option mangling Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  9:11     ` Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 10/15] selftests: netfilter: fix return value in zone subtest Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 11/15] netfilter: nft_compat: restrict raw table targets/matches Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  5:17     ` Florian Westphal
2026-10-18  0:56 ` [PATCH net-next 12/15] netfilter: flowtable: set inner protocol when popping tunnel header Pablo Neira Ayuso
2026-10-19  1:21   ` netdev-bot+sashiko
2026-10-19  9:11     ` Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 13/15] netfilter: flowtable: populate tunnel tuple regardless of inner protocol Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 14/15] netfilter: flowtable: add encap_proto to flow_offload_tunnel Pablo Neira Ayuso
2026-10-18  0:56 ` [PATCH net-next 15/15] netfilter: flowtable: unify tunnel push for IPv4 and IPv6 Pablo Neira Ayuso

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=179237288374.3135.9473018103688224106@kernel.org \
    --to=netdev-bot+sashiko@kernel.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=fw@strlen.de \
    --cc=horms@kernel.org \
    --cc=ja@ssi.bg \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pablo@netfilter.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.