linux/fs/f2fs
Sunmin Jeong 0a0f63c9e6 f2fs: truncate page cache before clearing flags when aborting atomic write
[ Upstream commit 74b0ebcbdd ]

In f2fs_do_write_data_page, FI_ATOMIC_FILE flag selects the target inode
between the original inode and COW inode. When aborting atomic write and
writeback occur simultaneously, invalid data can be written to original
inode if the FI_ATOMIC_FILE flag is cleared meanwhile.

To prevent the problem, let's truncate all pages before clearing the flag

Atomic write thread              Writeback thread
  f2fs_abort_atomic_write
    clear_inode_flag(inode, FI_ATOMIC_FILE)
                                  __writeback_single_inode
                                    do_writepages
                                      f2fs_do_write_data_page
                                        - use dn of original inode
    truncate_inode_pages_final

Fixes: 3db1de0e58 ("f2fs: change the current atomic write way")
Cc: stable@vger.kernel.org #v5.19+
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Reviewed-by: Yeongjin Gil <youngjin.gil@samsung.com>
Signed-off-by: Sunmin Jeong <s_min.jeong@samsung.com>
Reviewed-by: Daeho Jeong <daehojeong@google.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:32:22 +02:00
..
acl.c fs: port i_{g,u}id_into_vfs{g,u}id() to mnt_idmap 2023-01-19 09:24:29 +01:00
acl.h fs: port ->set_acl() to pass mnt_idmap 2023-01-19 09:24:27 +01:00
checkpoint.c f2fs: fix to truncate meta inode pages forcely 2024-03-26 18:17:27 -04:00
compress.c f2fs: ro: compress: fix to avoid caching unaligned extent 2024-03-26 18:17:25 -04:00
data.c f2fs: fix NULL pointer dereference in f2fs_submit_page_write() 2024-03-26 18:17:23 -04:00
debug.c f2fs: fix to account cp stats correctly 2023-08-14 13:42:05 -07:00
dir.c f2fs: fix to create selinux label during whiteout initialization 2024-03-26 18:17:24 -04:00
extent_cache.c f2fs: split initial and dynamic conditions for extent_cache 2023-09-12 13:49:33 -07:00
f2fs.h f2fs: mark inode dirty for FI_ATOMIC_COMMITTED flag 2024-04-03 15:32:22 +02:00
file.c f2fs: fix to avoid use-after-free issue in f2fs_filemap_fault 2024-03-26 18:17:27 -04:00
gc.c f2fs: Add error handling for negative returns from do_garbage_collect 2023-12-26 13:06:40 -08:00
gc.h f2fs: Fix system crash due to lack of free space in LFS 2023-04-10 10:58:45 -07:00
hash.c f2fs: don't use casefolded comparison for "." and ".." 2022-05-17 11:19:23 -07:00
inline.c f2fs: convert to new timestamp accessors 2023-10-18 13:26:22 +02:00
inode.c f2fs update for 6.8-rc1 2024-01-11 20:39:15 -08:00
iostat.c f2fs: add async reset zone command support 2023-06-12 13:04:09 -07:00
iostat.h f2fs: use iostat_lat_type directly as a parameter in the iostat_update_and_unbind_ctx() 2023-02-07 10:39:28 -08:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
namei.c f2fs: fix to create selinux label during whiteout initialization 2024-03-26 18:17:24 -04:00
node.c f2fs: ro: compress: fix to avoid caching unaligned extent 2024-03-26 18:17:25 -04:00
node.h f2fs: fix compile warning in f2fs_destroy_node_manager() 2023-06-30 16:38:27 -07:00
recovery.c f2fs: fix to avoid potential panic during recovery 2024-03-26 18:17:24 -04:00
segment.c f2fs: truncate page cache before clearing flags when aborting atomic write 2024-04-03 15:32:22 +02:00
segment.h f2fs: check number of blocks in a current section 2024-03-26 18:17:25 -04:00
shrinker.c f2fs: add block_age-based extent cache 2022-12-12 14:53:56 -08:00
super.c f2fs: zone: fix to remove pow2 check condition for zoned block device 2024-03-26 18:17:27 -04:00
sysfs.c f2fs: show more discard status by sysfs 2023-12-26 13:07:26 -08:00
verity.c f2fs-for-6.3-rc1 2023-02-27 16:18:51 -08:00
xattr.c f2fs: fix to check return value of f2fs_recover_xattr_data 2023-12-15 15:09:17 -08:00
xattr.h f2fs: move f2fs_xattr_handlers and f2fs_xattr_handler_map to .rodata 2023-10-09 16:24:18 +02:00