android_kernel_asus_sm8350/fs/erofs
Gao Xiang 880c79bdb0 erofs: stop parsing non-compact HEAD index if clusterofs is invalid
[ Upstream commit cc4efd3dd2ac9f89143e5d881609747ecff04164 ]

Syzbot generated a crafted image [1] with a non-compact HEAD index of
clusterofs 33024 while valid numbers should be 0 ~ lclustersize-1,
which causes the following unexpected behavior as below:

 BUG: unable to handle page fault for address: fffff52101a3fff9
 #PF: supervisor read access in kernel mode
 #PF: error_code(0x0000) - not-present page
 PGD 23ffed067 P4D 23ffed067 PUD 0
 Oops: 0000 [#1] PREEMPT SMP KASAN
 CPU: 1 PID: 4398 Comm: kworker/u5:1 Not tainted 6.3.0-rc6-syzkaller-g09a9639e56c0 #0
 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/30/2023
 Workqueue: erofs_worker z_erofs_decompressqueue_work
 RIP: 0010:z_erofs_decompress_queue+0xb7e/0x2b40
 ...
 Call Trace:
  <TASK>
  z_erofs_decompressqueue_work+0x99/0xe0
  process_one_work+0x8f6/0x1170
  worker_thread+0xa63/0x1210
  kthread+0x270/0x300
  ret_from_fork+0x1f/0x30

Note that normal images or images using compact indexes are not
impacted.  Let's fix this now.

[1] https://lore.kernel.org/r/000000000000ec75b005ee97fbaa@google.com

Reported-and-tested-by: syzbot+aafb3f37cfeb6534c4ac@syzkaller.appspotmail.com
Fixes: 02827e1796 ("staging: erofs: add erofs_map_blocks_iter")
Fixes: 152a333a58 ("staging: erofs: add compacted compression indexes support")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20230410173714.104604-1-hsiangkao@linux.alibaba.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-05-17 11:35:34 +02:00
..
compress.h
data.c erofs: avoid using generic_block_bmap 2020-12-30 11:51:23 +01:00
decompressor.c erofs: avoid consecutive detection for Highmem memory 2022-08-25 11:17:36 +02:00
dir.c erofs: rename errln/infoln/debugln to erofs_{err, info, dbg} 2019-09-05 20:10:09 +02:00
erofs_fs.h erofs: add unsupported inode i_format check 2021-05-11 14:04:02 +02:00
inode.c erofs: add unsupported inode i_format check 2021-05-11 14:04:02 +02:00
internal.h erofs: rename errln/infoln/debugln to erofs_{err, info, dbg} 2019-09-05 20:10:09 +02:00
Kconfig erofs: kill all erofs specific fault injection 2019-09-05 20:10:08 +02:00
Makefile
namei.c erofs: rename errln/infoln/debugln to erofs_{err, info, dbg} 2019-09-05 20:10:09 +02:00
super.c erofs: fix shift-out-of-bounds of blkszbits 2021-03-07 12:20:42 +01:00
tagptr.h
utils.c erofs: correct the remaining shrink objects 2020-04-17 10:50:16 +02:00
xattr.c erofs: initialized fields can only be observed after bit is set 2021-03-04 10:26:43 +01:00
xattr.h erofs: use erofs_inode naming 2019-09-05 20:10:07 +02:00
zdata.c erofs: fix unsafe pagevec reuse of hooked pclusters 2021-11-21 13:38:51 +01:00
zdata.h erofs: fix partially uninitialized misuse in z_erofs_onlinepage_fixup 2020-06-30 15:37:07 -04:00
zmap.c erofs: stop parsing non-compact HEAD index if clusterofs is invalid 2023-05-17 11:35:34 +02:00
zpvec.h erofs: fix unsafe pagevec reuse of hooked pclusters 2021-11-21 13:38:51 +01:00