Commit 56a1ecb9 authored by Chao Yu's avatar Chao Yu Committed by Yifan Qiao
Browse files

f2fs: fix to tag gcing flag on page during block migration

mainline inclusion
from mainline-v6.8-rc1
commit 4961acdd65c956e97c1a000c82d91a8c1cdbe44b
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I96GPF
CVE: CVE-2023-52588

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



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

It needs to add missing gcing flag on page during block migration,
in order to garantee migrated data be persisted during checkpoint,
otherwise out-of-order persistency between data and node may cause
data corruption after SPOR.

Similar issue was fixed by commit 2d1fe8a8 ("f2fs: fix to tag
gcing flag on page during file defragment").

Signed-off-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: default avatarYifan Qiao <qiaoyifan4@huawei.com>
parent 2173cb4a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1029,8 +1029,10 @@ static void set_cluster_dirty(struct compress_ctx *cc)
	int i;

	for (i = 0; i < cc->cluster_size; i++)
		if (cc->rpages[i])
		if (cc->rpages[i]) {
			set_page_dirty(cc->rpages[i]);
			set_page_private_gcing(cc->rpages[i]);
		}
}

static int prepare_compress_overwrite(struct compress_ctx *cc,
+2 −0
Original line number Diff line number Diff line
@@ -1317,6 +1317,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
			}
			memcpy_page(pdst, 0, psrc, 0, PAGE_SIZE);
			set_page_dirty(pdst);
			set_page_private_gcing(pdst);
			f2fs_put_page(pdst, 1);
			f2fs_put_page(psrc, 1);

@@ -4054,6 +4055,7 @@ static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
		f2fs_bug_on(F2FS_I_SB(inode), !page);

		set_page_dirty(page);
		set_page_private_gcing(page);
		f2fs_put_page(page, 1);
		f2fs_put_page(page, 0);
	}