Subject: CVE-2024-33847: f2fs: compress: don't allow unaligned truncation on released compress inode

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

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

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

f2fs: compress: don't allow unaligned truncation on released compress inode

f2fs image may be corrupted after below testcase:
- mkfs.f2fs -O extra_attr,compression -f /dev/vdb
- mount /dev/vdb /mnt/f2fs
- touch /mnt/f2fs/file
- f2fs_io setflags compression /mnt/f2fs/file
- dd if=/dev/zero of=/mnt/f2fs/file bs=4k count=4
- f2fs_io release_cblocks /mnt/f2fs/file
- truncate -s 8192 /mnt/f2fs/file
- umount /mnt/f2fs
- fsck.f2fs /dev/vdb

[ASSERT] (fsck_chk_inode_blk:1256)  --> ino: 0x5 has i_blocks: 0x00000002, but has 0x3 blocks
[FSCK] valid_block_count matching with CP             [Fail] [0x4, 0x5]
[FSCK] other corrupted bugs                           [Fail]

The reason is: partial truncation assume compressed inode has reserved
blocks, after partial truncation, valid block count may change w/o
.i_blocks and .total_valid_block_count update, result in corruption.

This patch only allow cluster size aligned truncation on released
compress inode for fixing.

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

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

	Issue introduced in 5.14 with commit c61404153eb6 and fixed in 5.15.161 with commit 8acae0472150
	Issue introduced in 5.14 with commit c61404153eb6 and fixed in 6.1.93 with commit 3ccf5210dc94
	Issue introduced in 5.14 with commit c61404153eb6 and fixed in 6.6.33 with commit 9f9341064a9b
	Issue introduced in 5.14 with commit c61404153eb6 and fixed in 6.9.4 with commit 5268241b41b1
	Issue introduced in 5.14 with commit c61404153eb6 and fixed in 6.10 with commit 29ed2b5dd521

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-33847
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/file.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/b8962cf98595d1ec62f40f23667de830567ec8bc
	https://git.kernel.org/stable/c/8acae047215024d1ac499b3c8337ef1b952f160b
	https://git.kernel.org/stable/c/3ccf5210dc941a7aa0180596ac021568be4d35ec
	https://git.kernel.org/stable/c/9f9341064a9b5246a32a7fe56b9f80c6f7f3c62d
	https://git.kernel.org/stable/c/5268241b41b1c5d0acca75e9b97d4fd719251c8c
	https://git.kernel.org/stable/c/29ed2b5dd521ce7c5d8466cd70bf0cc9d07afeee