Subject: CVE-2024-47668: lib/generic-radix-tree.c: Fix rare race in __genradix_ptr_alloc()

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

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

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

lib/generic-radix-tree.c: Fix rare race in __genradix_ptr_alloc()

If we need to increase the tree depth, allocate a new node, and then
race with another thread that increased the tree depth before us, we'll
still have a preallocated node that might be used later.

If we then use that node for a new non-root node, it'll still have a
pointer to the old root instead of being zeroed - fix this by zeroing it
in the cmpxchg failure path.

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

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

	Fixed in 5.4.284 with commit 0f27f4f44539
	Fixed in 5.10.226 with commit 99418ec776a3
	Fixed in 5.15.167 with commit ad5ee9feebc2
	Fixed in 6.1.110 with commit ebeff038744c
	Fixed in 6.6.51 with commit d942e855324a
	Fixed in 6.10.10 with commit 0f078f8ca93b
	Fixed in 6.11 with commit b2f11c6f3e1f

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-47668
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:
	lib/generic-radix-tree.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/0f27f4f445390cb7f73d4209cb2bf32834dc53da
	https://git.kernel.org/stable/c/99418ec776a39609f50934720419e0b464ca2283
	https://git.kernel.org/stable/c/ad5ee9feebc2eb8cfc76ed74a2d6e55343b0e169
	https://git.kernel.org/stable/c/ebeff038744c498a036e7a92eb8e433ae0a386d7
	https://git.kernel.org/stable/c/d942e855324a60107025c116245095632476613e
	https://git.kernel.org/stable/c/0f078f8ca93b28a34e20bd050f12cd4efeee7c0f
	https://git.kernel.org/stable/c/b2f11c6f3e1fc60742673b8675c95b78447f3dae