linux-stable/fs/f2fs
Chao Yu 3c201130cc f2fs: fix to do sanity check on segment type in build_sit_entries()
[ Upstream commit 09beadf289 ]

As Wenqing Liu <wenqingliu0120@gmail.com> reported in bugzilla:

https://bugzilla.kernel.org/show_bug.cgi?id=216285

RIP: 0010:memcpy_erms+0x6/0x10
 f2fs_update_meta_page+0x84/0x570 [f2fs]
 change_curseg.constprop.0+0x159/0xbd0 [f2fs]
 f2fs_do_replace_block+0x5c7/0x18a0 [f2fs]
 f2fs_replace_block+0xeb/0x180 [f2fs]
 recover_data+0x1abd/0x6f50 [f2fs]
 f2fs_recover_fsync_data+0x12ce/0x3250 [f2fs]
 f2fs_fill_super+0x4459/0x6190 [f2fs]
 mount_bdev+0x2cf/0x3b0
 legacy_get_tree+0xed/0x1d0
 vfs_get_tree+0x81/0x2b0
 path_mount+0x47e/0x19d0
 do_mount+0xce/0xf0
 __x64_sys_mount+0x12c/0x1a0
 do_syscall_64+0x38/0x90
 entry_SYSCALL_64_after_hwframe+0x63/0xcd

The root cause is segment type is invalid, so in f2fs_do_replace_block(),
f2fs accesses f2fs_sm_info::curseg_array with out-of-range segment type,
result in accessing invalid curseg->sum_blk during memcpy in
f2fs_update_meta_page(). Fix this by adding sanity check on segment type
in build_sit_entries().

Reported-by: Wenqing Liu <wenqingliu0120@gmail.com>
Signed-off-by: Chao Yu <chao.yu@oppo.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-08-25 11:40:45 +02:00
..
acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
acl.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
checkpoint.c f2fs: remove WARN_ON in f2fs_is_valid_blkaddr 2022-06-14 18:36:14 +02:00
compress.c f2fs: compress: fix to print raw data size in error path of lz4 decompression 2022-04-08 14:23:58 +02:00
data.c f2fs: fix compressed file start atomic write may cause data corruption 2022-04-08 14:23:11 +02:00
debug.c f2fs: use spin_lock to avoid hang 2022-04-08 14:23:58 +02:00
dir.c f2fs: don't use casefolded comparison for "." and ".." 2022-06-09 10:23:17 +02:00
extent_cache.c f2fs: support fault injection for f2fs_kmem_cache_alloc() 2021-08-17 11:59:05 -07:00
f2fs.h f2fs: fix to do sanity check for inline inode 2022-06-09 10:23:18 +02:00
file.c f2fs: do not allow to decompress files have FI_COMPRESS_RELEASED 2022-08-17 14:24:16 +02:00
gc.c f2fs: fix to unlock page correctly in error path of is_alive() 2022-04-08 14:22:52 +02:00
gc.h f2fs: introduce gc_merge mount option 2021-03-30 18:48:56 -07:00
hash.c f2fs: don't use casefolded comparison for "." and ".." 2022-06-09 10:23:17 +02:00
inline.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:23:18 +02:00
inode.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:23:18 +02:00
iostat.c f2fs: introduce periodic iostat io latency traces 2021-08-23 10:25:51 -07:00
iostat.h f2fs: introduce periodic iostat io latency traces 2021-08-23 10:25:51 -07:00
Kconfig f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
namei.c f2fs: attach inline_data after setting compression 2022-06-29 09:03:27 +02:00
node.c f2fs: fix to avoid use f2fs_bug_on() in f2fs_new_node_page() 2022-08-25 11:40:44 +02:00
node.h f2fs: swap: support migrating swapfile in aligned write mode 2021-06-23 01:09:35 -07:00
recovery.c f2fs: support fault injection for dquot_initialize() 2022-06-09 10:23:13 +02:00
segment.c f2fs: fix to do sanity check on segment type in build_sit_entries() 2022-08-25 11:40:45 +02:00
segment.h f2fs: fix to do sanity check on total_data_blocks 2022-06-09 10:23:17 +02:00
shrinker.c f2fs: avoid race condition for shrinker count 2020-12-03 00:59:26 -08:00
super.c f2fs: don't need inode lock for system hidden quota 2022-06-09 10:23:17 +02:00
sysfs.c f2fs: fix to enable ATGC correctly via gc_idle sysfs interface 2022-04-08 14:23:10 +02:00
verity.c f2fs: support fault injection for dquot_initialize() 2022-06-09 10:23:13 +02:00
xattr.c f2fs: support fault injection for dquot_initialize() 2022-06-09 10:23:13 +02:00
xattr.h