]> git.ipfire.org Git - thirdparty/linux.git/commit
netfilter: nf_nat: remove bogus direction check
authorFlorian Westphal <fw@strlen.de>
Mon, 8 Dec 2025 15:00:34 +0000 (16:00 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 11 Dec 2025 12:08:37 +0000 (13:08 +0100)
commit5ec8ca26fe93103577c904644b0957f069d0051a
treeb70ffc58dc37573ce3532d01cdc48b6ceacc58f4
parent99c6931fe1f5d3de1174ce771cb86c57f75bff14
netfilter: nf_nat: remove bogus direction check

Jakub reports spurious failures of the 'conntrack_reverse_clash.sh'
selftest.  A bogus test makes nat core resort to port rewrite even
though there is no need for this.

When the test is made, nf_nat_used_tuple() would already have caused us
to return if no other CPU had added a colliding entry.
Moreover, nf_nat_used_tuple() would have ignored the colliding entry if
their origin tuples had been the same.

All that is left to check is if the colliding entry in the hash table
is subject to NAT, and, if its not, if our entry matches in the reverse
direction, e.g. hash table has

addr1:1234 -> addr2:80, and we want to commit
addr2:80   -> addr1:1234.

Because we already checked that neither the new nor the committed entry is
subject to NAT we only have to check origin vs. reply tuple:
for non-nat entries, the reply tuple is always the inverted original.

Just in case there are more problems extend the error reporting
in the selftest while at it and dump conntrack table/stats on error.

Reported-by: Jakub Kicinski <kuba@kernel.org>
Closes: https://lore.kernel.org/netdev/20251206175135.4a56591b@kernel.org/
Fixes: d8f84a9bc7c4 ("netfilter: nf_nat: don't try nat source port reallocation for reverse dir clash")
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nf_nat_core.c
tools/testing/selftests/net/netfilter/conntrack_reverse_clash.c
tools/testing/selftests/net/netfilter/conntrack_reverse_clash.sh