Re: [syzbot] WARNING: ODEBUG bug in nilfs_mdt_destroy

From: Ryusuke Konishi
Date: Thu Oct 13 2022 - 05:28:26 EST


On Thu, Oct 13, 2022 at 5:18 PM syzbot wrote:
>
> Hello,
>
> syzbot found the following issue on:
>
> HEAD commit: bbed346d5a96 Merge branch 'for-next/core' into for-kernelci
> git tree: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
> console output: https://syzkaller.appspot.com/x/log.txt?x=161c8578880000
> kernel config: https://syzkaller.appspot.com/x/.config?x=3a4a45d2d827c1e
> dashboard link: https://syzkaller.appspot.com/bug?extid=e67c6877ee7e6e68c45a
> compiler: Debian clang version 13.0.1-++20220126092033+75e33f71c2da-1~exp1~20220126212112.63, GNU ld (GNU Binutils for Debian) 2.35.2
> userspace arch: arm64
>
> Unfortunately, I don't have any reproducer for this issue yet.
>
> Downloadable assets:
> disk image: https://storage.googleapis.com/syzbot-assets/e8e91bc79312/disk-bbed346d.raw.xz
> vmlinux: https://storage.googleapis.com/syzbot-assets/c1cb3fb3b77e/vmlinux-bbed346d.xz
>
> IMPORTANT: if you fix the issue, please add the following tag to the commit:
> Reported-by: syzbot+e67c6877ee7e6e68c45a@xxxxxxxxxxxxxxxxxxxxxxxxx
>
> ------------[ cut here ]------------
> ODEBUG: free active (active state 0) object type: timer_list hint: br_multicast_group_expired+0x0/0x230 net/bridge/br_multicast.c:606
> WARNING: CPU: 1 PID: 8079 at lib/debugobjects.c:505 debug_print_object lib/debugobjects.c:502 [inline]
> WARNING: CPU: 1 PID: 8079 at lib/debugobjects.c:505 __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> WARNING: CPU: 1 PID: 8079 at lib/debugobjects.c:505 debug_check_no_obj_freed+0x214/0x2b0 lib/debugobjects.c:1020
> Modules linked in:
> CPU: 1 PID: 8079 Comm: syz-executor.4 Not tainted 6.0.0-rc7-syzkaller-18095-gbbed346d5a96 #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/30/2022
> pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : debug_print_object lib/debugobjects.c:502 [inline]
> pc : __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> pc : debug_check_no_obj_freed+0x214/0x2b0 lib/debugobjects.c:1020
> lr : debug_print_object lib/debugobjects.c:502 [inline]
> lr : __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> lr : debug_check_no_obj_freed+0x214/0x2b0 lib/debugobjects.c:1020
> sp : ffff80001488b990
> x29: ffff80001488b9b0 x28: ffff000134488000 x27: ffff000134489000
> x26: ffff0001362a1398 x25: ffff000121ada0f0 x24: ffff80000bfff5b8
> x23: ffff000134488f40 x22: ffff80000bfff5b8 x21: 0000000000000001
> x20: dead000000000100 x19: ffff000134488f00 x18: 000000000000010e
> x17: 0000000000000000 x16: ffff80000db49158 x15: ffff0000facdb500
> x14: 0000000000000000 x13: 00000000ffffffff x12: 0000000000040000
> x11: 0000000000006464 x10: ffff80001f2be000 x9 : 49f3c7340dde9a00
> x8 : 49f3c7340dde9a00 x7 : ffff800008161d1c x6 : 0000000000000000
> x5 : 0000000000000080 x4 : 0000000000000001 x3 : 0000000000000000
> x2 : 0000000000000007 x1 : 0000000100000000 x0 : 0000000000000067
> Call trace:
> debug_print_object lib/debugobjects.c:502 [inline]
> __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> debug_check_no_obj_freed+0x214/0x2b0 lib/debugobjects.c:1020
> slab_free_hook mm/slub.c:1734 [inline]
> slab_free_freelist_hook mm/slub.c:1785 [inline]
> slab_free mm/slub.c:3539 [inline]
> kfree+0x14c/0x348 mm/slub.c:4567
> nilfs_mdt_destroy+0x2c/0x3c fs/nilfs2/mdt.c:498
> nilfs_free_inode+0x2c/0x54 fs/nilfs2/super.c:168
> i_callback fs/inode.c:249 [inline]
> alloc_inode+0xdc/0x104 fs/inode.c:274
> new_inode_pseudo fs/inode.c:1019 [inline]
> new_inode+0x2c/0xc0 fs/inode.c:1047
> nilfs_new_inode+0x48/0x378 fs/nilfs2/inode.c:334
> nilfs_mknod+0x7c/0x170 fs/nilfs2/namei.c:113
> vfs_mknod+0x2e8/0x318 fs/namei.c:3892
> unix_bind_bsd+0x138/0x320 net/unix/af_unix.c:1192
> unix_bind+0xd4/0x10c net/unix/af_unix.c:1283
> __sys_bind+0x148/0x1b0 net/socket.c:1776
> __do_sys_bind net/socket.c:1787 [inline]
> __se_sys_bind net/socket.c:1785 [inline]
> __arm64_sys_bind+0x28/0x3c net/socket.c:1785
> __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
> invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
> el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
> do_el0_svc+0x48/0x164 arch/arm64/kernel/syscall.c:206
> el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:636
> el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:654
> el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:581
> irq event stamp: 3716
> hardirqs last enabled at (3715): [<ffff800008161dac>] raw_spin_rq_unlock_irq kernel/sched/sched.h:1367 [inline]
> hardirqs last enabled at (3715): [<ffff800008161dac>] finish_lock_switch+0x94/0xe8 kernel/sched/core.c:4942
> hardirqs last disabled at (3716): [<ffff80000bfb5fbc>] el1_dbg+0x24/0x5c arch/arm64/kernel/entry-common.c:404
> softirqs last enabled at (3520): [<ffff80000801c33c>] local_bh_enable+0x10/0x34 include/linux/bottom_half.h:32
> softirqs last disabled at (3518): [<ffff80000801c308>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
> ---[ end trace 0000000000000000 ]---
>
>
> ---
> 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@xxxxxxxxxxxxxxxx.
>
> syzbot will keep track of this issue. See:
> https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

#syz dup: KASAN: use-after-free Read in nilfs_mdt_destroy

According to the stack trace, the abnormal condition starts with
nilfs_mdt_destroy(), which is triggered from the error path in
alloc_inode(). This is the same issue as the above report.

The bugfix for this is already merged in the mainline, but the tested
point (6.0.0-rc7) is before that.

Ryusuke Konishi