Subject: CVE-2023-52444: f2fs: fix to avoid dirent corruption

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

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

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

f2fs: fix to avoid dirent corruption

As Al reported in link[1]:

f2fs_rename()
...
	if (old_dir != new_dir && !whiteout)
		f2fs_set_link(old_inode, old_dir_entry,
					old_dir_page, new_dir);
	else
		f2fs_put_page(old_dir_page, 0);

You want correct inumber in the ".." link.  And cross-directory
rename does move the source to new parent, even if you'd been asked
to leave a whiteout in the old place.

[1] https://lore.kernel.org/all/20231017055040.GN800259@ZenIV/

With below testcase, it may cause dirent corruption, due to it missed
to call f2fs_set_link() to update ".." link to new directory.
- mkdir -p dir/foo
- renameat2 -w dir/foo bar

[ASSERT] (__chk_dots_dentries:1421)  --> Bad inode number[0x4] for '..', parent parent ino is [0x3]
[FSCK] other corrupted bugs                           [Fail]

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

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

	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 4.19.306 with commit 02160112e6d4
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 5.4.268 with commit 5624a3c1b1eb
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 5.10.209 with commit 6f866885e147
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 5.15.148 with commit f100ba617d8b
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 6.1.75 with commit f0145860c20b
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 6.6.14 with commit d3c0b49aaa12
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 6.7.2 with commit 2fb4867f4405
	Issue introduced in 4.2 with commit 7e01e7ad746b and fixed in 6.8 with commit 53edb549565f

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-52444
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/f2fs/namei.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/02160112e6d45c2610b049df6eb693d7a2e57b46
	https://git.kernel.org/stable/c/5624a3c1b1ebc8991318e1cce2aa719542991024
	https://git.kernel.org/stable/c/6f866885e147d33efc497f1095f35b2ee5ec7310
	https://git.kernel.org/stable/c/f100ba617d8be6c98a68f3744ef7617082975b77
	https://git.kernel.org/stable/c/f0145860c20be6bae6785c7a2249577674702ac7
	https://git.kernel.org/stable/c/d3c0b49aaa12a61d560528f5d605029ab57f0728
	https://git.kernel.org/stable/c/2fb4867f4405aea8c0519d7d188207f232a57862
	https://git.kernel.org/stable/c/53edb549565f55ccd0bdf43be3d66ce4c2d48b28