kernel_samsung_a53x/fs/jfs
Osama Muhammad 4a84c2e09a FS:JFS:UBSAN:array-index-out-of-bounds in dbAdjTree
[ Upstream commit 9862ec7ac1cbc6eb5ee4a045b5d5b8edbb2f7e68 ]

Syzkaller reported the following issue:

UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dmap.c:2867:6
index 196694 is out of range for type 's8[1365]' (aka 'signed char[1365]')
CPU: 1 PID: 109 Comm: jfsCommit Not tainted 6.6.0-rc3-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
 ubsan_epilogue lib/ubsan.c:217 [inline]
 __ubsan_handle_out_of_bounds+0x11c/0x150 lib/ubsan.c:348
 dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867
 dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834
 dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331
 dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline]
 dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402
 txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534
 txUpdateMap+0x342/0x9e0
 txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline]
 jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732
 kthread+0x2d3/0x370 kernel/kthread.c:388
 ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
 </TASK>
================================================================================
Kernel panic - not syncing: UBSAN: panic_on_warn set ...
CPU: 1 PID: 109 Comm: jfsCommit Not tainted 6.6.0-rc3-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
 panic+0x30f/0x770 kernel/panic.c:340
 check_panic_on_warn+0x82/0xa0 kernel/panic.c:236
 ubsan_epilogue lib/ubsan.c:223 [inline]
 __ubsan_handle_out_of_bounds+0x13c/0x150 lib/ubsan.c:348
 dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867
 dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834
 dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331
 dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline]
 dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402
 txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534
 txUpdateMap+0x342/0x9e0
 txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline]
 jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732
 kthread+0x2d3/0x370 kernel/kthread.c:388
 ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
 </TASK>
Kernel Offset: disabled
Rebooting in 86400 seconds..

The issue is caused when the value of lp becomes greater than
CTLTREESIZE which is the max size of stree. Adding a simple check
solves this issue.

Dave:
As the function returns a void, good error handling
would require a more intrusive code reorganization, so I modified
Osama's patch at use WARN_ON_ONCE for lack of a cleaner option.

The patch is tested via syzbot.

Reported-by: syzbot+39ba34a099ac2e9bd3cb@syzkaller.appspotmail.com
Link: https://syzkaller.appspot.com/bug?extid=39ba34a099ac2e9bd3cb
Signed-off-by: Osama Muhammad <osmtendev@gmail.com>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-18 12:13:09 +01:00
..
acl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
file.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
inode.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ioctl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_acl.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_btree.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_debug.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_debug.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_dinode.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_discard.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_discard.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_dmap.c FS:JFS:UBSAN:array-index-out-of-bounds in dbAdjTree 2024-11-18 12:13:09 +01:00
jfs_dmap.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_dtree.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_dtree.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_extent.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_extent.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_filsys.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_imap.c jfs: fix array-index-out-of-bounds in diAlloc 2024-11-18 11:43:14 +01:00
jfs_imap.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_incore.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_inode.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_inode.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_lock.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_logmgr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_logmgr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_metapage.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_metapage.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_mount.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_superblock.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_txnmgr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_txnmgr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_types.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_umount.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_unicode.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_unicode.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_uniupr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_xattr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_xtree.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jfs_xtree.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
namei.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
resize.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
super.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
symlink.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xattr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00