* [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit
@ 2024-07-26 5:45 syzbot
2024-07-26 13:40 ` Edward Adam Davis
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: syzbot @ 2024-07-26 5:45 UTC (permalink / raw)
To: jfs-discussion, linux-kernel, shaggy, syzkaller-bugs
Hello,
syzbot found the following issue on:
HEAD commit: 7846b618e0a4 Merge tag 'rtc-6.11' of git://git.kernel.org/..
git tree: upstream
console+strace: https://syzkaller.appspot.com/x/log.txt?x=169ade0d980000
kernel config: https://syzkaller.appspot.com/x/.config?x=f4925140c45a2a50
dashboard link: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=165876b5980000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1453ee95980000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/43e8dc30bfe7/disk-7846b618.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/2563411f0b58/vmlinux-7846b618.xz
kernel image: https://storage.googleapis.com/syzbot-assets/19d3b69b2212/bzImage-7846b618.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/97777a7e85e9/mount_0.gz
Bisection is inconclusive: the issue happens on the oldest tested release.
bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=13f21c65980000
console output: https://syzkaller.appspot.com/x/log.txt?x=17f21c65980000
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com
loop0: detected capacity change from 0 to 32768
loop0: detected capacity change from 32768 to 32745
------------[ cut here ]------------
UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dmap.c:2628:27
index 4294967295 is out of range for type 's8[1365]' (aka 'signed char[1365]')
CPU: 0 PID: 5087 Comm: syz-executor157 Not tainted 6.10.0-syzkaller-11323-g7846b618e0a4 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
ubsan_epilogue lib/ubsan.c:231 [inline]
__ubsan_handle_out_of_bounds+0x121/0x150 lib/ubsan.c:429
dbSplit+0x1fd/0x220 fs/jfs/jfs_dmap.c:2628
dbAllocBits+0x4e5/0x9a0 fs/jfs/jfs_dmap.c:2191
dbAllocDmap fs/jfs/jfs_dmap.c:2032 [inline]
dbAllocDmapLev+0x250/0x4a0 fs/jfs/jfs_dmap.c:1986
dbAllocCtl+0x113/0x920 fs/jfs/jfs_dmap.c:1823
dbAllocAG+0x28f/0x10b0 fs/jfs/jfs_dmap.c:1364
dbAlloc+0x658/0xca0 fs/jfs/jfs_dmap.c:888
dtSplitUp fs/jfs/jfs_dtree.c:979 [inline]
dtInsert+0xda7/0x6b00 fs/jfs/jfs_dtree.c:868
jfs_create+0x7ba/0xbb0 fs/jfs/namei.c:137
lookup_open fs/namei.c:3578 [inline]
open_last_lookups fs/namei.c:3647 [inline]
path_openat+0x1a9a/0x3470 fs/namei.c:3883
do_filp_open+0x235/0x490 fs/namei.c:3913
do_sys_openat2+0x13e/0x1d0 fs/open.c:1416
do_sys_open fs/open.c:1431 [inline]
__do_sys_openat fs/open.c:1447 [inline]
__se_sys_openat fs/open.c:1442 [inline]
__x64_sys_openat+0x247/0x2a0 fs/open.c:1442
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7ff80ad14019
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 17 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffcebdf6708 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
RAX: ffffffffffffffda RBX: 00007ff80ad5d095 RCX: 00007ff80ad14019
RDX: 000000000000275a RSI: 0000000020000080 RDI: 00000000ffffff9c
RBP: 00007ff80ad8e5f0 R08: 00005555712cc4c0 R09: 00005555712cc4c0
R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffcebdf6730
R13: 00007ffcebdf6958 R14: 431bde82d7b634db R15: 00007ff80ad5d03b
</TASK>
---[ end trace ]---
---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
For information about bisection process see: https://goo.gl/tpsmEJ#bisection
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit 2024-07-26 5:45 [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit syzbot @ 2024-07-26 13:40 ` Edward Adam Davis 2024-07-26 17:18 ` syzbot 2024-07-26 14:22 ` [PATCH] jfs: check if dmt_leafidx is less than zero Edward Adam Davis 2024-07-27 1:08 ` [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit Edward Adam Davis 2 siblings, 1 reply; 11+ messages in thread From: Edward Adam Davis @ 2024-07-26 13:40 UTC (permalink / raw) To: syzbot+dca05492eff41f604890; +Cc: linux-kernel, syzkaller-bugs check dmt_leafidx < 0 #syz test: upstream 7846b618e0a4 diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index cb3cda1390ad..c5b8883599e3 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -1956,6 +1956,7 @@ dbAllocDmapLev(struct bmap * bmp, { s64 blkno; int leafidx, rc; + dmtree_t *tp = (dmtree_t *) &dp->tree; /* can't be more than a dmaps worth of blocks */ assert(l2nb <= L2BPERDMAP); @@ -1964,10 +1965,10 @@ dbAllocDmapLev(struct bmap * bmp, * free space. if sufficient free space is found, dbFindLeaf() * returns the index of the leaf at which free space was found. */ - if (dbFindLeaf((dmtree_t *) &dp->tree, l2nb, &leafidx, false)) + if (dbFindLeaf(tp, l2nb, &leafidx, false)) return -ENOSPC; - if (leafidx < 0) + if (leafidx < 0 || le32_to_cpu(tp->dmt_leafidx) < 0) return -EIO; /* determine the block number within the file system corresponding ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit 2024-07-26 13:40 ` Edward Adam Davis @ 2024-07-26 17:18 ` syzbot 0 siblings, 0 replies; 11+ messages in thread From: syzbot @ 2024-07-26 17:18 UTC (permalink / raw) To: eadavis, linux-kernel, syzkaller-bugs Hello, syzbot has tested the proposed patch but the reproducer is still triggering an issue: UBSAN: array-index-out-of-bounds in dbSplit loop0: detected capacity change from 0 to 32768 loop0: detected capacity change from 32768 to 32745 ------------[ cut here ]------------ UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dmap.c:2629:27 index 4294967295 is out of range for type 's8[1365]' (aka 'signed char[1365]') CPU: 1 PID: 5951 Comm: syz.0.15 Not tainted 6.10.0-syzkaller-11323-g7846b618e0a4-dirty #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114 ubsan_epilogue lib/ubsan.c:231 [inline] __ubsan_handle_out_of_bounds+0x121/0x150 lib/ubsan.c:429 dbSplit+0x1fd/0x220 fs/jfs/jfs_dmap.c:2629 dbAllocBits+0x4e5/0x9a0 fs/jfs/jfs_dmap.c:2192 dbAllocDmap fs/jfs/jfs_dmap.c:2033 [inline] dbAllocDmapLev+0x250/0x4a0 fs/jfs/jfs_dmap.c:1987 dbAllocCtl+0x113/0x920 fs/jfs/jfs_dmap.c:1823 dbAllocAG+0x28f/0x10b0 fs/jfs/jfs_dmap.c:1364 dbAlloc+0x658/0xca0 fs/jfs/jfs_dmap.c:888 dtSplitUp fs/jfs/jfs_dtree.c:979 [inline] dtInsert+0xda7/0x6b00 fs/jfs/jfs_dtree.c:868 jfs_create+0x7ba/0xbb0 fs/jfs/namei.c:137 lookup_open fs/namei.c:3578 [inline] open_last_lookups fs/namei.c:3647 [inline] path_openat+0x1a9a/0x3470 fs/namei.c:3883 do_filp_open+0x235/0x490 fs/namei.c:3913 do_sys_openat2+0x13e/0x1d0 fs/open.c:1416 do_sys_open fs/open.c:1431 [inline] __do_sys_openat fs/open.c:1447 [inline] __se_sys_openat fs/open.c:1442 [inline] __x64_sys_openat+0x247/0x2a0 fs/open.c:1442 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f3b4dd75b59 Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f3b4ebb0048 EFLAGS: 00000246 ORIG_RAX: 0000000000000101 RAX: ffffffffffffffda RBX: 00007f3b4df05f60 RCX: 00007f3b4dd75b59 RDX: 000000000000275a RSI: 0000000020000080 RDI: ffffffffffffff9c RBP: 00007f3b4dde4e5d R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000000b R14: 00007f3b4df05f60 R15: 00007ffda143f618 </TASK> ---[ end trace ]--- Tested on: commit: 7846b618 Merge tag 'rtc-6.11' of git://git.kernel.org/.. git tree: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git console output: https://syzkaller.appspot.com/x/log.txt?x=16d89903980000 kernel config: https://syzkaller.appspot.com/x/.config?x=f4925140c45a2a50 dashboard link: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40 patch: https://syzkaller.appspot.com/x/patch.diff?x=176745f1980000 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] jfs: check if dmt_leafidx is less than zero 2024-07-26 5:45 [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit syzbot 2024-07-26 13:40 ` Edward Adam Davis @ 2024-07-26 14:22 ` Edward Adam Davis 2024-07-26 14:52 ` [Jfs-discussion] " Dave Kleikamp 2024-07-27 1:08 ` [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit Edward Adam Davis 2 siblings, 1 reply; 11+ messages in thread From: Edward Adam Davis @ 2024-07-26 14:22 UTC (permalink / raw) To: syzbot+dca05492eff41f604890 Cc: jfs-discussion, linux-kernel, shaggy, syzkaller-bugs syzbot report a out of bounds in dbSplit, it because dmt_leafidx less than 0, add a checking for dmt_leafidx in dbAllocDmapLev. Reported-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 Signed-off-by: Edward Adam Davis <eadavis@qq.com> --- fs/jfs/jfs_dmap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index cb3cda1390ad..c5b8883599e3 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -1956,6 +1956,7 @@ dbAllocDmapLev(struct bmap * bmp, { s64 blkno; int leafidx, rc; + dmtree_t *tp = (dmtree_t *) &dp->tree; /* can't be more than a dmaps worth of blocks */ assert(l2nb <= L2BPERDMAP); @@ -1964,10 +1965,10 @@ dbAllocDmapLev(struct bmap * bmp, * free space. if sufficient free space is found, dbFindLeaf() * returns the index of the leaf at which free space was found. */ - if (dbFindLeaf((dmtree_t *) &dp->tree, l2nb, &leafidx, false)) + if (dbFindLeaf(tp, l2nb, &leafidx, false)) return -ENOSPC; - if (leafidx < 0) + if (leafidx < 0 || le32_to_cpu(tp->dmt_leafidx) < 0) return -EIO; /* determine the block number within the file system corresponding -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Jfs-discussion] [PATCH] jfs: check if dmt_leafidx is less than zero 2024-07-26 14:22 ` [PATCH] jfs: check if dmt_leafidx is less than zero Edward Adam Davis @ 2024-07-26 14:52 ` Dave Kleikamp 2024-07-27 1:42 ` [PATCH V2] jfs: check if leafidx greater than num leaves per dmap tree Edward Adam Davis 0 siblings, 1 reply; 11+ messages in thread From: Dave Kleikamp @ 2024-07-26 14:52 UTC (permalink / raw) To: Edward Adam Davis, syzbot+dca05492eff41f604890 Cc: jfs-discussion, syzkaller-bugs, linux-kernel On 7/26/24 9:22AM, Edward Adam Davis via Jfs-discussion wrote: > syzbot report a out of bounds in dbSplit, it because dmt_leafidx less > than 0, add a checking for dmt_leafidx in dbAllocDmapLev. This addresses the particular case, but I wonder if it would be a little more robust to move the check into dbFindLeaf(). It would also catch a similar issue when called from dbFindCtl(). > > Reported-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com > Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > --- > fs/jfs/jfs_dmap.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c > index cb3cda1390ad..c5b8883599e3 100644 > --- a/fs/jfs/jfs_dmap.c > +++ b/fs/jfs/jfs_dmap.c > @@ -1956,6 +1956,7 @@ dbAllocDmapLev(struct bmap * bmp, > { > s64 blkno; > int leafidx, rc; > + dmtree_t *tp = (dmtree_t *) &dp->tree; > > /* can't be more than a dmaps worth of blocks */ > assert(l2nb <= L2BPERDMAP); > @@ -1964,10 +1965,10 @@ dbAllocDmapLev(struct bmap * bmp, > * free space. if sufficient free space is found, dbFindLeaf() > * returns the index of the leaf at which free space was found. > */ > - if (dbFindLeaf((dmtree_t *) &dp->tree, l2nb, &leafidx, false)) > + if (dbFindLeaf(tp, l2nb, &leafidx, false)) > return -ENOSPC; > > - if (leafidx < 0) > + if (leafidx < 0 || le32_to_cpu(tp->dmt_leafidx) < 0) > return -EIO; > > /* determine the block number within the file system corresponding ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V2] jfs: check if leafidx greater than num leaves per dmap tree 2024-07-26 14:52 ` [Jfs-discussion] " Dave Kleikamp @ 2024-07-27 1:42 ` Edward Adam Davis 2024-08-23 18:30 ` Dave Kleikamp 0 siblings, 1 reply; 11+ messages in thread From: Edward Adam Davis @ 2024-07-27 1:42 UTC (permalink / raw) To: dave.kleikamp Cc: eadavis, jfs-discussion, linux-kernel, syzbot+dca05492eff41f604890, syzkaller-bugs syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf. Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 Signed-off-by: Edward Adam Davis <eadavis@qq.com> --- fs/jfs/jfs_dmap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index cb3cda1390ad..516bac758053 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -2976,6 +2976,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) */ assert(n < 4); } + if (le32_to_cpu(tp->dmt_leafidx) >= LPERDMAP) + return -ENOSPC; /* set the return to the leftmost leaf describing sufficient * free space. -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH V2] jfs: check if leafidx greater than num leaves per dmap tree 2024-07-27 1:42 ` [PATCH V2] jfs: check if leafidx greater than num leaves per dmap tree Edward Adam Davis @ 2024-08-23 18:30 ` Dave Kleikamp 2024-08-24 1:25 ` [PATCH V3] " Edward Adam Davis 0 siblings, 1 reply; 11+ messages in thread From: Dave Kleikamp @ 2024-08-23 18:30 UTC (permalink / raw) To: Edward Adam Davis Cc: jfs-discussion, linux-kernel, syzbot+dca05492eff41f604890, syzkaller-bugs On 7/26/24 8:42PM, Edward Adam Davis wrote: > syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater > than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf. > > Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com > Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > --- > fs/jfs/jfs_dmap.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c > index cb3cda1390ad..516bac758053 100644 > --- a/fs/jfs/jfs_dmap.c > +++ b/fs/jfs/jfs_dmap.c > @@ -2976,6 +2976,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) > */ > assert(n < 4); > } > + if (le32_to_cpu(tp->dmt_leafidx) >= LPERDMAP) > + return -ENOSPC; NACK. It needs to be smarter than this. dbFindLeaf() can be called with a control page in which dmt_leafidx is bound by LPERCTL, which is larger than LPERDMAP. > > /* set the return to the leftmost leaf describing sufficient > * free space. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] jfs: check if leafidx greater than num leaves per dmap tree 2024-08-23 18:30 ` Dave Kleikamp @ 2024-08-24 1:25 ` Edward Adam Davis 2024-08-27 16:23 ` Dave Kleikamp 0 siblings, 1 reply; 11+ messages in thread From: Edward Adam Davis @ 2024-08-24 1:25 UTC (permalink / raw) To: dave.kleikamp Cc: eadavis, jfs-discussion, linux-kernel, syzbot+dca05492eff41f604890, syzkaller-bugs syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf. Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 Signed-off-by: Edward Adam Davis <eadavis@qq.com> --- V2 -> V3: Exclude control page fs/jfs/jfs_dmap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index cb3cda1390ad..516bac758053 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -2976,6 +2976,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) */ assert(n < 4); } + if (!is_ctl && le32_to_cpu(tp->dmt_leafidx) >= LPERDMAP) + return -ENOSPC; /* set the return to the leftmost leaf describing sufficient * free space. -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH V3] jfs: check if leafidx greater than num leaves per dmap tree 2024-08-24 1:25 ` [PATCH V3] " Edward Adam Davis @ 2024-08-27 16:23 ` Dave Kleikamp 0 siblings, 0 replies; 11+ messages in thread From: Dave Kleikamp @ 2024-08-27 16:23 UTC (permalink / raw) To: Edward Adam Davis Cc: jfs-discussion, linux-kernel, syzbot+dca05492eff41f604890, syzkaller-bugs On 8/23/24 8:25PM, Edward Adam Davis wrote: > syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater > than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf. > > Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com > Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > --- > V2 -> V3: Exclude control page > > fs/jfs/jfs_dmap.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c > index cb3cda1390ad..516bac758053 100644 > --- a/fs/jfs/jfs_dmap.c > +++ b/fs/jfs/jfs_dmap.c > @@ -2976,6 +2976,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) > */ > assert(n < 4); > } > + if (!is_ctl && le32_to_cpu(tp->dmt_leafidx) >= LPERDMAP) > + return -ENOSPC; > > /* set the return to the leftmost leaf describing sufficient > * free space. I was thinking something more along the lines of this. jfs: check if leafidx greater than num leaves per dmap tree syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf. Shaggy: Modified sanity check to apply to control pages as well as leaf pages. Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 Signed-off-by: Edward Adam Davis <eadavis@qq.com> Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com> --- fs/jfs/jfs_dmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index 8847e8c5d5b4..974ecf5e0d95 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -2944,9 +2944,10 @@ static void dbAdjTree(dmtree_t *tp, int leafno, int newval, bool is_ctl) static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) { int ti, n = 0, k, x = 0; - int max_size; + int max_size, max_idx; max_size = is_ctl ? CTLTREESIZE : TREESIZE; + max_idx = is_ctl ? LPERCTL : LPERDMAP; /* first check the root of the tree to see if there is * sufficient free space. @@ -2978,6 +2979,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) */ assert(n < 4); } + if (le32_to_cpu(tp->dmt_leafidx) >= max_idx) + return -ENOSPC; /* set the return to the leftmost leaf describing sufficient * free space. -- 2.46.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit 2024-07-26 5:45 [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit syzbot 2024-07-26 13:40 ` Edward Adam Davis 2024-07-26 14:22 ` [PATCH] jfs: check if dmt_leafidx is less than zero Edward Adam Davis @ 2024-07-27 1:08 ` Edward Adam Davis 2024-07-27 1:32 ` syzbot 2 siblings, 1 reply; 11+ messages in thread From: Edward Adam Davis @ 2024-07-27 1:08 UTC (permalink / raw) To: syzbot+dca05492eff41f604890; +Cc: linux-kernel, syzkaller-bugs check dmt_leafidx < 0 #syz test: upstream 7846b618e0a4 diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index cb3cda1390ad..516bac758053 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c @@ -2976,6 +2976,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl) */ assert(n < 4); } + if (le32_to_cpu(tp->dmt_leafidx) > LPERDMAP) + return -ENOSPC; /* set the return to the leftmost leaf describing sufficient * free space. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit 2024-07-27 1:08 ` [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit Edward Adam Davis @ 2024-07-27 1:32 ` syzbot 0 siblings, 0 replies; 11+ messages in thread From: syzbot @ 2024-07-27 1:32 UTC (permalink / raw) To: eadavis, linux-kernel, syzkaller-bugs Hello, syzbot has tested the proposed patch and the reproducer did not trigger any issue: Reported-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com Tested on: commit: 7846b618 Merge tag 'rtc-6.11' of git://git.kernel.org/.. git tree: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git console output: https://syzkaller.appspot.com/x/log.txt?x=1329dac9980000 kernel config: https://syzkaller.appspot.com/x/.config?x=f4925140c45a2a50 dashboard link: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890 compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40 patch: https://syzkaller.appspot.com/x/patch.diff?x=10245ae3980000 Note: testing is done by a robot and is best-effort only. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-08-27 16:23 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-26 5:45 [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit syzbot 2024-07-26 13:40 ` Edward Adam Davis 2024-07-26 17:18 ` syzbot 2024-07-26 14:22 ` [PATCH] jfs: check if dmt_leafidx is less than zero Edward Adam Davis 2024-07-26 14:52 ` [Jfs-discussion] " Dave Kleikamp 2024-07-27 1:42 ` [PATCH V2] jfs: check if leafidx greater than num leaves per dmap tree Edward Adam Davis 2024-08-23 18:30 ` Dave Kleikamp 2024-08-24 1:25 ` [PATCH V3] " Edward Adam Davis 2024-08-27 16:23 ` Dave Kleikamp 2024-07-27 1:08 ` [syzbot] [jfs?] UBSAN: array-index-out-of-bounds in dbSplit Edward Adam Davis 2024-07-27 1:32 ` syzbot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox