Subject: CVE-2023-52566: nilfs2: fix potential use after free in nilfs_gccache_submit_read_data()

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

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

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

nilfs2: fix potential use after free in nilfs_gccache_submit_read_data()

In nilfs_gccache_submit_read_data(), brelse(bh) is called to drop the
reference count of bh when the call to nilfs_dat_translate() fails.  If
the reference count hits 0 and its owner page gets unlocked, bh may be
freed.  However, bh->b_page is dereferenced to put the page after that,
which may result in a use-after-free bug.  This patch moves the release
operation after unlocking and putting the page.

NOTE: The function in question is only called in GC, and in combination
with current userland tools, address translation using DAT does not occur
in that function, so the code path that causes this issue will not be
executed.  However, it is possible to run that code path by intentionally
modifying the userland GC library or by calling the GC ioctl directly.

[[email-masked]: NOTE added to the commit log]

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

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

	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 4.14.327 with commit fb1084e63ee5
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 4.19.296 with commit bb61224f6abc
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 5.4.258 with commit 193b5a1c6c67
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 5.10.198 with commit 7130a87ca323
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 5.15.134 with commit 3936e8714907
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 6.1.56 with commit 980663f1d189
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 6.5.6 with commit 28df4646ad8b
	Issue introduced in 2.6.30 with commit a3d93f709e89 and fixed in 6.6 with commit 7ee29facd8a9

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-52566
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/nilfs2/gcinode.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/fb1084e63ee56958b0a56e17a50a4fd86445b9c1
	https://git.kernel.org/stable/c/bb61224f6abc8e71bfdf06d7c984e23460875f5b
	https://git.kernel.org/stable/c/193b5a1c6c67c36b430989dc063fe7ea4e200a33
	https://git.kernel.org/stable/c/7130a87ca32396eb9bf48b71a2d42259ae44c6c7
	https://git.kernel.org/stable/c/3936e8714907cd55e37c7cc50e50229e4a9042e8
	https://git.kernel.org/stable/c/980663f1d189eedafd18d80053d9cf3e2ceb5c8c
	https://git.kernel.org/stable/c/28df4646ad8b433340772edc90ca709cdefc53e2
	https://git.kernel.org/stable/c/7ee29facd8a9c5a26079148e36bcf07141b3a6bc