Commit bfc67790 authored by Haisu Wang's avatar Haisu Wang Committed by Yifan Qiao
Browse files

btrfs: fix the length of reserved qgroup to free

mainline inclusion
from mainline-v6.12-rc7
commit 2b084d8205949dd804e279df8e68531da78be1e8
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IARV5C
CVE: CVE-2024-46733

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2b084d8205949dd804e279df8e68531da78be1e8



--------------------------------

The dealloc flag may be cleared and the extent won't reach the disk in
cow_file_range when errors path. The reserved qgroup space is freed in
commit 30479f31d44d ("btrfs: fix qgroup reserve leaks in
cow_file_range"). However, the length of untouched region to free needs
to be adjusted with the correct remaining region size.

Fixes: 30479f31d44d ("btrfs: fix qgroup reserve leaks in cow_file_range")
CC: stable@vger.kernel.org # 6.11+
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarHaisu Wang <haisuwang@tencent.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
Conflicts:
	fs/btrfs/inode.c
[Just context differences.]
Signed-off-by: default avatarYifan Qiao <qiaoyifan4@huawei.com>
parent 9d9865d7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1150,7 +1150,7 @@ static noinline int cow_file_range(struct inode *inode,
				     locked_page,
				     clear_bits | EXTENT_CLEAR_DATA_RESV,
				     page_ops);
	btrfs_qgroup_free_data(inode, NULL, start, cur_alloc_size);
	btrfs_qgroup_free_data(inode, NULL, start, end - start + 1);
	goto out;
}