Subject: CVE-2024-41042: netfilter: nf_tables: prefer nft_chain_validate

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

netfilter: nf_tables: prefer nft_chain_validate

nft_chain_validate already performs loop detection because a cycle will
result in a call stack overflow (ctx->level >= NFT_JUMP_STACK_SIZE).

It also follows maps via ->validate callback in nft_lookup, so there
appears no reason to iterate the maps again.

nf_tables_check_loops() and all its helper functions can be removed.
This improves ruleset load time significantly, from 23s down to 12s.

This also fixes a crash bug. Old loop detection code can result in
unbounded recursion:

BUG: TASK stack guard page was hit at ....
Oops: stack guard page: 0000 [#1] PREEMPT SMP KASAN
CPU: 4 PID: 1539 Comm: nft Not tainted 6.10.0-rc5+ #1
[..]

with a suitable ruleset during validation of register stores.

I can't see any actual reason to attempt to check for this from
nft_validate_register_store(), at this point the transaction is still in
progress, so we don't have a full picture of the rule graph.

For nf-next it might make sense to either remove it or make this depend
on table->validate_state in case we could catch an error earlier
(for improved error reporting to userspace).

The Linux kernel CVE team has assigned CVE-2024-41042 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 4.19.320 with commit 1947e4c3346f
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 5.4.282 with commit cd4348e0a502
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 5.10.224 with commit 31c35f9f89ef
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 5.15.165 with commit 8246b7466c8d
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 6.1.105 with commit b6b6e430470e
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 6.6.46 with commit 717c91c6ed73
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 6.9.10 with commit 9df785aeb7dc
	Issue introduced in 3.13 with commit 20a69341f2d0 and fixed in 6.10 with commit cff3bd012a95

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-41042
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	net/netfilter/nf_tables_api.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/1947e4c3346faa8ac7e343652c0fd3b3e394202f
	https://git.kernel.org/stable/c/cd4348e0a50286282c314ad6d2b0740e7c812c24
	https://git.kernel.org/stable/c/31c35f9f89ef585f1edb53e17ac73a0ca4a9712b
	https://git.kernel.org/stable/c/8246b7466c8da49d0d9e85e26cbd69dd6d3e3d1e
	https://git.kernel.org/stable/c/b6b6e430470e1c3c5513311cb35a15a205595abe
	https://git.kernel.org/stable/c/717c91c6ed73e248de6a15bc53adefb81446c9d0
	https://git.kernel.org/stable/c/9df785aeb7dcc8efd1d4110bb27d26005298ebae
	https://git.kernel.org/stable/c/cff3bd012a9512ac5ed858d38e6ed65f6391008c