Subject: CVE-2023-52699: sysv: don't call sb_bread() with pointers_lock held

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

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

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

sysv: don't call sb_bread() with pointers_lock held

syzbot is reporting sleep in atomic context in SysV filesystem [1], for
sb_bread() is called with rw_spinlock held.

A "write_lock(&pointers_lock) => read_lock(&pointers_lock) deadlock" bug
and a "sb_bread() with write_lock(&pointers_lock)" bug were introduced by
"Replace BKL for chain locking with sysvfs-private rwlock" in Linux 2.5.12.

Then, "[PATCH] err1-40: sysvfs locking fix" in Linux 2.6.8 fixed the
former bug by moving pointers_lock lock to the callers, but instead
introduced a "sb_bread() with read_lock(&pointers_lock)" bug (which made
this problem easier to hit).

Al Viro suggested that why not to do like get_branch()/get_block()/
find_shared() in Minix filesystem does. And doing like that is almost a
revert of "[PATCH] err1-40: sysvfs locking fix" except that get_branch()
 from with find_shared() is called without write_lock(&pointers_lock).

The Linux kernel CVE team has assigned CVE-2023-52699 to this issue.

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

	Fixed in 4.19.312 with commit 13b33feb2ebd
	Fixed in 5.4.274 with commit 1b4fe801b5be
	Fixed in 5.10.215 with commit 674c1c4229e7
	Fixed in 5.15.155 with commit fd203d2c671b
	Fixed in 6.1.86 with commit 53cb1e52c9db
	Fixed in 6.6.27 with commit 89e8524135a3
	Fixed in 6.8.6 with commit a69224223746
	Fixed in 6.9 with commit f123dc86388c

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-2023-52699
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:
	fs/sysv/itree.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/13b33feb2ebddc2b1aa607f553566b18a4af1d76
	https://git.kernel.org/stable/c/1b4fe801b5bedec2b622ddb18e5c9bf26c63d79f
	https://git.kernel.org/stable/c/674c1c4229e743070e09db63a23442950ff000d1
	https://git.kernel.org/stable/c/fd203d2c671bdee9ab77090ff394d3b71b627927
	https://git.kernel.org/stable/c/53cb1e52c9db618c08335984d1ca80db220ccf09
	https://git.kernel.org/stable/c/89e8524135a3902e7563a5a59b7b5ec1bf4904ac
	https://git.kernel.org/stable/c/a69224223746ab96d43e5db9d22d136827b7e2d3
	https://git.kernel.org/stable/c/f123dc86388cb669c3d6322702dc441abc35c31e