* [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
@ 2025-10-27 21:18 syzbot
2025-10-27 22:17 ` Ryusuke Konishi
` (6 more replies)
0 siblings, 7 replies; 13+ messages in thread
From: syzbot @ 2025-10-27 21:18 UTC (permalink / raw)
To: konishi.ryusuke, linux-kernel, linux-nilfs, syzkaller-bugs
Hello,
syzbot found the following issue on:
HEAD commit: b98c94eed4a9 arm64: mte: Do not warn if the page is alread..
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=14144be2580000
kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
userspace arch: arm64
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=12ce5d2f980000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16136e7c580000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/2c82e514449b/disk-b98c94ee.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/a322ed38c368/vmlinux-b98c94ee.xz
kernel image: https://storage.googleapis.com/syzbot-assets/059db7d7114e/Image-b98c94ee.gz.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/3ad719caa640/mount_0.gz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
------------[ cut here ]------------
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: __ll_sc_atomic64_andnot arch/arm64/include/asm/atomic_ll_sc.h:-1 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: arch_atomic64_andnot arch/arm64/include/asm/atomic.h:64 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: raw_atomic64_andnot include/linux/atomic/atomic-arch-fallback.h:3675 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: raw_atomic_long_andnot include/linux/atomic/atomic-long.h:964 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: arch_clear_bit include/asm-generic/bitops/atomic.h:25 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: clear_bit include/asm-generic/bitops/instrumented-atomic.h:42 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: clear_nilfs_purging fs/nilfs2/the_nilfs.h:206 [inline]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout+0x0/0x50 fs/nilfs2/segment.c:2893
WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 debug_print_object lib/debugobjects.c:612 [inline]
WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
Modules linked in:
CPU: 0 UID: 0 PID: 6673 Comm: syz-executor Not tainted syzkaller #0 PREEMPT
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/30/2025
pstate: 63400005 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : debug_print_object lib/debugobjects.c:612 [inline]
pc : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
pc : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
lr : debug_print_object lib/debugobjects.c:612 [inline]
lr : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
lr : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
sp : ffff8000a1547910
x29: ffff8000a1547950 x28: ffff0000cf608400 x27: 0000000000000000
x26: ffff80008aed7f20 x25: ffff0000cf608270 x24: ffff800082080a4c
x23: ffff0000d8cabfc0 x22: ffff0000cf608000 x21: dfff800000000000
x20: 0000000000000000 x19: ffff0000cf608000 x18: 00000000ffffffff
x17: 626f206131313462 x16: ffff800082de9540 x15: 0000000000000001
x14: 1fffe000337db6fa x13: 0000000000000000 x12: 0000000000000000
x11: ffff6000337db6fb x10: 0000000000ff0100 x9 : c941407f25652900
x8 : c941407f25652900 x7 : ffff8000805638d4 x6 : 0000000000000000
x5 : 0000000000000000 x4 : 0000000000000000 x3 : ffff8000807d4f2c
x2 : 0000000000000001 x1 : 0000000100000000 x0 : 0000000000000000
Call trace:
debug_print_object lib/debugobjects.c:612 [inline] (P)
__debug_check_no_obj_freed lib/debugobjects.c:1099 [inline] (P)
debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129 (P)
slab_free_hook mm/slub.c:2454 [inline]
slab_free mm/slub.c:6611 [inline]
kfree+0x120/0x600 mm/slub.c:6818
nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
generic_shutdown_super+0x12c/0x2b8 fs/super.c:642
kill_block_super+0x44/0x90 fs/super.c:1722
deactivate_locked_super+0xc4/0x12c fs/super.c:473
deactivate_super+0xe0/0x100 fs/super.c:506
cleanup_mnt+0x31c/0x3ac fs/namespace.c:1327
__cleanup_mnt+0x20/0x30 fs/namespace.c:1334
task_work_run+0x1dc/0x260 kernel/task_work.c:227
resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
exit_to_user_mode_loop+0xfc/0x178 kernel/entry/common.c:43
exit_to_user_mode_prepare include/linux/irq-entry-common.h:225 [inline]
arm64_exit_to_user_mode arch/arm64/kernel/entry-common.c:103 [inline]
el0_svc+0x170/0x254 arch/arm64/kernel/entry-common.c:747
el0t_64_sync_handler+0x84/0x12c arch/arm64/kernel/entry-common.c:765
el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:596
irq event stamp: 136662
hardirqs last enabled at (136661): [<ffff800080559f90>] vprintk_store+0x898/0xac8 kernel/printk/printk.c:2329
hardirqs last disabled at (136662): [<ffff80008ade9670>] el1_brk64+0x20/0x54 arch/arm64/kernel/entry-common.c:434
softirqs last enabled at (136170): [<ffff8000801f95fc>] local_bh_enable+0x10/0x34 include/linux/bottom_half.h:32
softirqs last disabled at (136168): [<ffff8000801f95c8>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
---[ end trace 0000000000000000 ]---
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
---
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.
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] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
@ 2025-10-27 22:17 ` Ryusuke Konishi
2025-10-28 3:26 ` Edward Adam Davis
` (5 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Ryusuke Konishi @ 2025-10-27 22:17 UTC (permalink / raw)
To: syzbot; +Cc: linux-kernel, linux-nilfs, syzkaller-bugs
On Tue, Oct 28, 2025 at 6:18 AM syzbot
<syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com> wrote:
>
> Hello,
>
> syzbot found the following issue on:
>
> HEAD commit: b98c94eed4a9 arm64: mte: Do not warn if the page is alread..
> 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=14144be2580000
> kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
> dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
> compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
> userspace arch: arm64
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=12ce5d2f980000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16136e7c580000
>
> Downloadable assets:
> disk image: https://storage.googleapis.com/syzbot-assets/2c82e514449b/disk-b98c94ee.raw.xz
> vmlinux: https://storage.googleapis.com/syzbot-assets/a322ed38c368/vmlinux-b98c94ee.xz
> kernel image: https://storage.googleapis.com/syzbot-assets/059db7d7114e/Image-b98c94ee.gz.xz
> mounted in repro: https://storage.googleapis.com/syzbot-assets/3ad719caa640/mount_0.gz
>
> IMPORTANT: if you fix the issue, please add the following tag to the commit:
> Reported-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
>
> ------------[ cut here ]------------
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: __ll_sc_atomic64_andnot arch/arm64/include/asm/atomic_ll_sc.h:-1 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: arch_atomic64_andnot arch/arm64/include/asm/atomic.h:64 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: raw_atomic64_andnot include/linux/atomic/atomic-arch-fallback.h:3675 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: raw_atomic_long_andnot include/linux/atomic/atomic-long.h:964 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: arch_clear_bit include/asm-generic/bitops/atomic.h:25 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: clear_bit include/asm-generic/bitops/instrumented-atomic.h:42 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: clear_nilfs_purging fs/nilfs2/the_nilfs.h:206 [inline]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout+0x0/0x50 fs/nilfs2/segment.c:2893
> WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 debug_print_object lib/debugobjects.c:612 [inline]
> WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
> WARNING: CPU: 0 PID: 6673 at lib/debugobjects.c:615 debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
> Modules linked in:
> CPU: 0 UID: 0 PID: 6673 Comm: syz-executor Not tainted syzkaller #0 PREEMPT
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/30/2025
> pstate: 63400005 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
> pc : debug_print_object lib/debugobjects.c:612 [inline]
> pc : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
> pc : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
> lr : debug_print_object lib/debugobjects.c:612 [inline]
> lr : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
> lr : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
> sp : ffff8000a1547910
> x29: ffff8000a1547950 x28: ffff0000cf608400 x27: 0000000000000000
> x26: ffff80008aed7f20 x25: ffff0000cf608270 x24: ffff800082080a4c
> x23: ffff0000d8cabfc0 x22: ffff0000cf608000 x21: dfff800000000000
> x20: 0000000000000000 x19: ffff0000cf608000 x18: 00000000ffffffff
> x17: 626f206131313462 x16: ffff800082de9540 x15: 0000000000000001
> x14: 1fffe000337db6fa x13: 0000000000000000 x12: 0000000000000000
> x11: ffff6000337db6fb x10: 0000000000ff0100 x9 : c941407f25652900
> x8 : c941407f25652900 x7 : ffff8000805638d4 x6 : 0000000000000000
> x5 : 0000000000000000 x4 : 0000000000000000 x3 : ffff8000807d4f2c
> x2 : 0000000000000001 x1 : 0000000100000000 x0 : 0000000000000000
> Call trace:
> debug_print_object lib/debugobjects.c:612 [inline] (P)
> __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline] (P)
> debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129 (P)
> slab_free_hook mm/slub.c:2454 [inline]
> slab_free mm/slub.c:6611 [inline]
> kfree+0x120/0x600 mm/slub.c:6818
> nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
> nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
> nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
> generic_shutdown_super+0x12c/0x2b8 fs/super.c:642
> kill_block_super+0x44/0x90 fs/super.c:1722
> deactivate_locked_super+0xc4/0x12c fs/super.c:473
> deactivate_super+0xe0/0x100 fs/super.c:506
> cleanup_mnt+0x31c/0x3ac fs/namespace.c:1327
> __cleanup_mnt+0x20/0x30 fs/namespace.c:1334
> task_work_run+0x1dc/0x260 kernel/task_work.c:227
> resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
> exit_to_user_mode_loop+0xfc/0x178 kernel/entry/common.c:43
> exit_to_user_mode_prepare include/linux/irq-entry-common.h:225 [inline]
> arm64_exit_to_user_mode arch/arm64/kernel/entry-common.c:103 [inline]
> el0_svc+0x170/0x254 arch/arm64/kernel/entry-common.c:747
> el0t_64_sync_handler+0x84/0x12c arch/arm64/kernel/entry-common.c:765
> el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:596
> irq event stamp: 136662
> hardirqs last enabled at (136661): [<ffff800080559f90>] vprintk_store+0x898/0xac8 kernel/printk/printk.c:2329
> hardirqs last disabled at (136662): [<ffff80008ade9670>] el1_brk64+0x20/0x54 arch/arm64/kernel/entry-common.c:434
> softirqs last enabled at (136170): [<ffff8000801f95fc>] local_bh_enable+0x10/0x34 include/linux/bottom_half.h:32
> softirqs last disabled at (136168): [<ffff8000801f95c8>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
> ---[ end trace 0000000000000000 ]---
> NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
> NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
...
> NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
It seems that a timer-related resource leak was detected in the final
kfree() call of nilfs_segctor_destroy(), which releases the log writer
during unmount.
This issue was supposed to have been resolved already, but it’s
possible that something was overlooked.
If it can be reproduced with a reproducer, I’d like to dig deeper into
what’s happening.
Ryusuke Konishi
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
2025-10-27 22:17 ` Ryusuke Konishi
@ 2025-10-28 3:26 ` Edward Adam Davis
2025-10-28 4:07 ` syzbot
2025-10-28 5:16 ` Edward Adam Davis
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Edward Adam Davis @ 2025-10-28 3:26 UTC (permalink / raw)
To: syzbot+24d8b70f039151f65590; +Cc: linux-kernel, syzkaller-bugs
#syz test
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..0e8733bedfcb 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2808,6 +2808,10 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
down_write(&nilfs->ns_segctor_sem);
+ if (sci->sc_task) {
+ printk("sci %p sctask %p %s\n", sci, sci->sc_task, __func__);
+ timer_shutdown_sync(&sci->sc_timer);
+ }
kfree(sci);
}
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-28 3:26 ` Edward Adam Davis
@ 2025-10-28 4:07 ` syzbot
0 siblings, 0 replies; 13+ messages in thread
From: syzbot @ 2025-10-28 4:07 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+24d8b70f039151f65590@syzkaller.appspotmail.com
Tested-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Tested on:
commit: b98c94ee arm64: mte: Do not warn if the page is alread..
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=164c0704580000
kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=15e16258580000
Note: testing is done by a robot and is best-effort only.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
2025-10-27 22:17 ` Ryusuke Konishi
2025-10-28 3:26 ` Edward Adam Davis
@ 2025-10-28 5:16 ` Edward Adam Davis
2025-10-28 6:54 ` syzbot
2025-10-28 7:45 ` Edward Adam Davis
` (3 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Edward Adam Davis @ 2025-10-28 5:16 UTC (permalink / raw)
To: syzbot+24d8b70f039151f65590; +Cc: linux-kernel, syzkaller-bugs
#syz test
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..8a17ae49bc41 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2768,7 +2768,9 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
if (sci->sc_task) {
wake_up(&sci->sc_wait_daemon);
- kthread_stop(sci->sc_task);
+ printk("kthread start to stop (sci %p)sctask %p, %s\n", sci, sci->sc_task, __func__);
+ int ret = kthread_stop(sci->sc_task);
+ printk("kthread stopped (sci %p)sctask %p thread return %d, %s\n", sci, sci->sc_task, ret, __func__);
}
spin_lock(&sci->sc_state_lock);
@@ -2808,6 +2810,10 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
down_write(&nilfs->ns_segctor_sem);
+ if (sci->sc_task) {
+ printk("sci %p sctask %p %s\n", sci, sci->sc_task, __func__);
+ //timer_shutdown_sync(&sci->sc_timer);
+ }
kfree(sci);
}
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-28 5:16 ` Edward Adam Davis
@ 2025-10-28 6:54 ` syzbot
0 siblings, 0 replies; 13+ messages in thread
From: syzbot @ 2025-10-28 6:54 UTC (permalink / raw)
To: eadavis, linux-kernel, syzkaller-bugs
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
WARNING: ODEBUG bug in nilfs_detach_log_writer
sci 000000002fc63a1f sctask 00000000cb1c8b43 nilfs_segctor_destroy
------------[ cut here ]------------
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: __ll_sc_atomic64_andnot arch/arm64/include/asm/atomic_ll_sc.h:-1 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: arch_atomic64_andnot arch/arm64/include/asm/atomic.h:64 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: raw_atomic64_andnot include/linux/atomic/atomic-arch-fallback.h:3675 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: raw_atomic_long_andnot include/linux/atomic/atomic-long.h:964 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: arch_clear_bit include/asm-generic/bitops/atomic.h:25 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: clear_bit include/asm-generic/bitops/instrumented-atomic.h:42 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: clear_nilfs_purging fs/nilfs2/the_nilfs.h:206 [inline]
ODEBUG: free active (active state 0) object: 00000000243cd50f object type: timer_list hint: nilfs_construction_timeout+0x0/0x50 fs/nilfs2/segment.c:2899
WARNING: CPU: 1 PID: 7086 at lib/debugobjects.c:615 debug_print_object lib/debugobjects.c:612 [inline]
WARNING: CPU: 1 PID: 7086 at lib/debugobjects.c:615 __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
WARNING: CPU: 1 PID: 7086 at lib/debugobjects.c:615 debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
Modules linked in:
CPU: 1 UID: 0 PID: 7086 Comm: syz-executor Not tainted syzkaller #0 PREEMPT
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/30/2025
pstate: 63400005 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : debug_print_object lib/debugobjects.c:612 [inline]
pc : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
pc : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
lr : debug_print_object lib/debugobjects.c:612 [inline]
lr : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
lr : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
sp : ffff8000a1b578f0
x29: ffff8000a1b57930 x28: ffff0000dbe26c00 x27: 0000000000000000
x26: ffff80008aed7f20 x25: ffff0000dbe26a70 x24: ffff800082080b44
x23: ffff0000ca04be70 x22: ffff0000dbe26000 x21: dfff800000000000
x20: 0000000000000000 x19: ffff0000dbe26800 x18: 00000000ffffffff
x17: 626f206630356463 x16: ffff800082de9640 x15: 0000000000000001
x14: 1ffff0001436ae54 x13: 0000000000000000 x12: 0000000000000000
x11: 00000000778946ad x10: 0000000000ff0100 x9 : 73910471fe57b500
x8 : 73910471fe57b500 x7 : ffff8000805638d4 x6 : 0000000000000000
x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000002
x2 : 0000000000000002 x1 : 0000000100000000 x0 : 0000000000000000
Call trace:
debug_print_object lib/debugobjects.c:612 [inline] (P)
__debug_check_no_obj_freed lib/debugobjects.c:1099 [inline] (P)
debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129 (P)
slab_free_hook mm/slub.c:2454 [inline]
slab_free mm/slub.c:6611 [inline]
kfree+0x120/0x600 mm/slub.c:6818
nilfs_segctor_destroy fs/nilfs2/segment.c:2817 [inline]
nilfs_detach_log_writer+0x684/0x9c4 fs/nilfs2/segment.c:2883
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
generic_shutdown_super+0x12c/0x2b8 fs/super.c:642
kill_block_super+0x44/0x90 fs/super.c:1722
deactivate_locked_super+0xc4/0x12c fs/super.c:473
deactivate_super+0xe0/0x100 fs/super.c:506
cleanup_mnt+0x31c/0x3ac fs/namespace.c:1327
__cleanup_mnt+0x20/0x30 fs/namespace.c:1334
task_work_run+0x1dc/0x260 kernel/task_work.c:227
resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
exit_to_user_mode_loop+0xfc/0x178 kernel/entry/common.c:43
exit_to_user_mode_prepare include/linux/irq-entry-common.h:225 [inline]
arm64_exit_to_user_mode arch/arm64/kernel/entry-common.c:103 [inline]
el0_svc+0x170/0x254 arch/arm64/kernel/entry-common.c:747
el0t_64_sync_handler+0x84/0x12c arch/arm64/kernel/entry-common.c:765
el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:596
irq event stamp: 393728
hardirqs last enabled at (393727): [<ffff800080559f90>] vprintk_store+0x898/0xac8 kernel/printk/printk.c:2329
hardirqs last disabled at (393728): [<ffff80008ade9780>] el1_brk64+0x20/0x54 arch/arm64/kernel/entry-common.c:434
softirqs last enabled at (393526): [<ffff8000803d7488>] softirq_handle_end kernel/softirq.c:468 [inline]
softirqs last enabled at (393526): [<ffff8000803d7488>] handle_softirqs+0xaf8/0xc88 kernel/softirq.c:650
softirqs last disabled at (392817): [<ffff800080022024>] __do_softirq+0x14/0x20 kernel/softirq.c:656
---[ end trace 0000000000000000 ]---
kthread start to stop (sci 000000005be7e884)sctask 000000008631ea2b, nilfs_segctor_destroy
kthread stopped (sci 000000005be7e884)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000009d71d04a)sctask 00000000a0141cfe, nilfs_segctor_destroy
kthread stopped (sci 000000009d71d04a)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000002b2f1418)sctask 000000006c451d11, nilfs_segctor_destroy
kthread stopped (sci 000000002b2f1418)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000effbdfa6)sctask 00000000a6318a24, nilfs_segctor_destroy
kthread stopped (sci 00000000effbdfa6)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000000fdbe516)sctask 0000000026c32dd0, nilfs_segctor_destroy
kthread stopped (sci 000000000fdbe516)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000001905d913)sctask 0000000050a4687e, nilfs_segctor_destroy
kthread stopped (sci 000000001905d913)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000a3eeddcd)sctask 0000000079f3d7c8, nilfs_segctor_destroy
kthread stopped (sci 00000000a3eeddcd)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000095360f23)sctask 0000000017af06a9, nilfs_segctor_destroy
kthread stopped (sci 0000000095360f23)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000005a9a2e80)sctask 00000000450f99c2, nilfs_segctor_destroy
kthread stopped (sci 000000005a9a2e80)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000a5326494)sctask 000000003bc4f8b8, nilfs_segctor_destroy
kthread stopped (sci 00000000a5326494)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000a603b099)sctask 000000008631ea2b, nilfs_segctor_destroy
kthread stopped (sci 00000000a603b099)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000affd4105)sctask 0000000064524a43, nilfs_segctor_destroy
kthread stopped (sci 00000000affd4105)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000028cafbde)sctask 000000005945da3a, nilfs_segctor_destroy
kthread stopped (sci 0000000028cafbde)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000004d042e5c)sctask 0000000034209c98, nilfs_segctor_destroy
kthread stopped (sci 000000004d042e5c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000d5a02571)sctask 000000008197e345, nilfs_segctor_destroy
kthread stopped (sci 00000000d5a02571)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000cb8a270a)sctask 00000000a075cdeb, nilfs_segctor_destroy
kthread stopped (sci 00000000cb8a270a)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000023a2d3ea)sctask 00000000952a7887, nilfs_segctor_destroy
kthread stopped (sci 0000000023a2d3ea)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000ce675362)sctask 000000000df5a992, nilfs_segctor_destroy
kthread stopped (sci 00000000ce675362)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000576731dc)sctask 0000000082cdf5af, nilfs_segctor_destroy
kthread stopped (sci 00000000576731dc)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000e5b3a0b0)sctask 00000000e4102e6b, nilfs_segctor_destroy
kthread stopped (sci 00000000e5b3a0b0)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000008c9fa24c)sctask 00000000ca2032a8, nilfs_segctor_destroy
kthread stopped (sci 000000008c9fa24c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000072959ad0)sctask 00000000d02d4a8e, nilfs_segctor_destroy
kthread stopped (sci 0000000072959ad0)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000dc9d7abc)sctask 00000000979ed9ea, nilfs_segctor_destroy
kthread stopped (sci 00000000dc9d7abc)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000b18846c3)sctask 0000000076687d8f, nilfs_segctor_destroy
kthread stopped (sci 00000000b18846c3)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000536e8ffd)sctask 000000007798b86f, nilfs_segctor_destroy
kthread stopped (sci 00000000536e8ffd)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000006b6f7633)sctask 0000000087ea6322, nilfs_segctor_destroy
kthread stopped (sci 000000006b6f7633)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000eadf0db0)sctask 0000000020355604, nilfs_segctor_destroy
kthread stopped (sci 00000000eadf0db0)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000007344f784)sctask 00000000e08f1ab4, nilfs_segctor_destroy
kthread stopped (sci 000000007344f784)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000010fbc4d9)sctask 00000000f03c335c, nilfs_segctor_destroy
kthread stopped (sci 0000000010fbc4d9)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000f46a4493)sctask 00000000ba507f0b, nilfs_segctor_destroy
kthread stopped (sci 00000000f46a4493)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000060b110ed)sctask 000000003b1ab5ad, nilfs_segctor_destroy
kthread stopped (sci 0000000060b110ed)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000694aac4c)sctask 0000000060a56e61, nilfs_segctor_destroy
kthread stopped (sci 00000000694aac4c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000009864c2ac)sctask 000000006e998649, nilfs_segctor_destroy
kthread stopped (sci 000000009864c2ac)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000e0e3a3e5)sctask 00000000ac1e6b29, nilfs_segctor_destroy
kthread stopped (sci 00000000e0e3a3e5)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000005a10065e)sctask 00000000057002a4, nilfs_segctor_destroy
kthread stopped (sci 000000005a10065e)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000e4f1117f)sctask 00000000d1405353, nilfs_segctor_destroy
kthread stopped (sci 00000000e4f1117f)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000001b211764)sctask 000000006280584a, nilfs_segctor_destroy
kthread stopped (sci 000000001b211764)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000090abbc6)sctask 00000000c3e1a812, nilfs_segctor_destroy
kthread stopped (sci 00000000090abbc6)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000006e76001d)sctask 00000000eed8bd1d, nilfs_segctor_destroy
kthread stopped (sci 000000006e76001d)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000009c3f81c)sctask 00000000030407b5, nilfs_segctor_destroy
kthread stopped (sci 0000000009c3f81c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000006c06e552)sctask 00000000368252a8, nilfs_segctor_destroy
kthread stopped (sci 000000006c06e552)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000000ea9b08)sctask 0000000026c266fc, nilfs_segctor_destroy
kthread stopped (sci 0000000000ea9b08)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000694aac4c)sctask 0000000012ac78da, nilfs_segctor_destroy
kthread stopped (sci 00000000694aac4c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000040949351)sctask 00000000a59115fd, nilfs_segctor_destroy
kthread stopped (sci 0000000040949351)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000020aa063d)sctask 00000000b617a775, nilfs_segctor_destroy
kthread stopped (sci 0000000020aa063d)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 000000006c416ffd)sctask 00000000da61bfc3, nilfs_segctor_destroy
kthread stopped (sci 000000006c416ffd)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 00000000cb84fb3c)sctask 0000000030bae658, nilfs_segctor_destroy
kthread stopped (sci 00000000cb84fb3c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
kthread start to stop (sci 0000000023c9588c)sctask 00000000bfd16b12, nilfs_segctor_destroy
kthread stopped (sci 0000000023c9588c)sctask 0000000000000000 thread return 0, nilfs_segctor_destroy
NILFS (loop4): disposed unprocessed dirty file(s) when stopping log writer
Tested on:
commit: b98c94ee arm64: mte: Do not warn if the page is alread..
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=1252d3cd980000
kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=16fbef34580000
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
` (2 preceding siblings ...)
2025-10-28 5:16 ` Edward Adam Davis
@ 2025-10-28 7:45 ` Edward Adam Davis
2025-10-28 8:09 ` syzbot
2025-10-29 3:06 ` Edward Adam Davis
` (2 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Edward Adam Davis @ 2025-10-28 7:45 UTC (permalink / raw)
To: syzbot+24d8b70f039151f65590; +Cc: linux-kernel, syzkaller-bugs
#syz test
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..9e95b0255bfe 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2671,7 +2671,7 @@ static int nilfs_segctor_thread(void *arg)
}
prepare_to_wait(&sci->sc_wait_daemon, &wait,
- TASK_INTERRUPTIBLE);
+ TASK_UNINTERRUPTIBLE);
should_write = nilfs_log_write_required(sci, &mode);
if (!should_write)
schedule();
@@ -2808,6 +2808,10 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
down_write(&nilfs->ns_segctor_sem);
+ if (sci->sc_task) {
+ printk("!!! sci %p sctask %p %s\n", sci, sci->sc_task, __func__);
+ //timer_shutdown_sync(&sci->sc_timer);
+ }
kfree(sci);
}
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-28 7:45 ` Edward Adam Davis
@ 2025-10-28 8:09 ` syzbot
0 siblings, 0 replies; 13+ messages in thread
From: syzbot @ 2025-10-28 8:09 UTC (permalink / raw)
To: eadavis, linux-kernel, syzkaller-bugs
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
WARNING: ODEBUG bug in nilfs_detach_log_writer
!!! sci 00000000654d1193 sctask 000000001d256998 nilfs_segctor_destroy
------------[ cut here ]------------
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: __ll_sc_atomic64_andnot arch/arm64/include/asm/atomic_ll_sc.h:-1 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: arch_atomic64_andnot arch/arm64/include/asm/atomic.h:64 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: raw_atomic64_andnot include/linux/atomic/atomic-arch-fallback.h:3675 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: raw_atomic_long_andnot include/linux/atomic/atomic-long.h:964 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: arch_clear_bit include/asm-generic/bitops/atomic.h:25 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: clear_bit include/asm-generic/bitops/instrumented-atomic.h:42 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: clear_nilfs_purging fs/nilfs2/the_nilfs.h:206 [inline]
ODEBUG: free active (active state 0) object: 00000000cb289602 object type: timer_list hint: nilfs_construction_timeout+0x0/0x50 fs/nilfs2/segment.c:2897
WARNING: CPU: 0 PID: 7171 at lib/debugobjects.c:615 debug_print_object lib/debugobjects.c:612 [inline]
WARNING: CPU: 0 PID: 7171 at lib/debugobjects.c:615 __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
WARNING: CPU: 0 PID: 7171 at lib/debugobjects.c:615 debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
Modules linked in:
CPU: 0 UID: 0 PID: 7171 Comm: syz-executor Not tainted syzkaller #0 PREEMPT
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/30/2025
pstate: 63400005 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : debug_print_object lib/debugobjects.c:612 [inline]
pc : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
pc : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
lr : debug_print_object lib/debugobjects.c:612 [inline]
lr : __debug_check_no_obj_freed lib/debugobjects.c:1099 [inline]
lr : debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129
sp : ffff80009d0378f0
x29: ffff80009d037930 x28: ffff0000d5f63c00 x27: 0000000000000000
x26: ffff80008aed7f20 x25: ffff0000d5f63a70 x24: ffff800082080abc
x23: ffff0000c6402188 x22: ffff0000d5f63000 x21: dfff800000000000
x20: 0000000000000000 x19: ffff0000d5f63800 x18: 1fffe000337db690
x17: 626f203230363938 x16: ffff800082de95c0 x15: 0000000000000001
x14: 1fffe000337db6fa x13: 0000000000000000 x12: 0000000000000000
x11: ffff6000337db6fb x10: 0000000000ff0100 x9 : b75f7cbc17284200
x8 : b75f7cbc17284200 x7 : ffff8000805638d4 x6 : 0000000000000000
x5 : 0000000000000000 x4 : 0000000000000000 x3 : ffff8000807d4f2c
x2 : 0000000000000001 x1 : 0000000100000000 x0 : 0000000000000000
Call trace:
debug_print_object lib/debugobjects.c:612 [inline] (P)
__debug_check_no_obj_freed lib/debugobjects.c:1099 [inline] (P)
debug_check_no_obj_freed+0x390/0x470 lib/debugobjects.c:1129 (P)
slab_free_hook mm/slub.c:2454 [inline]
slab_free mm/slub.c:6611 [inline]
kfree+0x120/0x600 mm/slub.c:6818
nilfs_segctor_destroy fs/nilfs2/segment.c:2815 [inline]
nilfs_detach_log_writer+0x69c/0x93c fs/nilfs2/segment.c:2881
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
generic_shutdown_super+0x12c/0x2b8 fs/super.c:642
kill_block_super+0x44/0x90 fs/super.c:1722
deactivate_locked_super+0xc4/0x12c fs/super.c:473
deactivate_super+0xe0/0x100 fs/super.c:506
cleanup_mnt+0x31c/0x3ac fs/namespace.c:1327
__cleanup_mnt+0x20/0x30 fs/namespace.c:1334
task_work_run+0x1dc/0x260 kernel/task_work.c:227
resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
exit_to_user_mode_loop+0xfc/0x178 kernel/entry/common.c:43
exit_to_user_mode_prepare include/linux/irq-entry-common.h:225 [inline]
arm64_exit_to_user_mode arch/arm64/kernel/entry-common.c:103 [inline]
el0_svc+0x170/0x254 arch/arm64/kernel/entry-common.c:747
el0t_64_sync_handler+0x84/0x12c arch/arm64/kernel/entry-common.c:765
el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:596
irq event stamp: 199786
hardirqs last enabled at (199785): [<ffff800080559f90>] vprintk_store+0x898/0xac8 kernel/printk/printk.c:2329
hardirqs last disabled at (199786): [<ffff80008ade9700>] el1_brk64+0x20/0x54 arch/arm64/kernel/entry-common.c:434
softirqs last enabled at (199286): [<ffff8000801f95fc>] local_bh_enable+0x10/0x34 include/linux/bottom_half.h:32
softirqs last disabled at (199284): [<ffff8000801f95c8>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
---[ end trace 0000000000000000 ]---
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
NILFS (loop1): disposed unprocessed dirty file(s) when stopping log writer
Tested on:
commit: b98c94ee arm64: mte: Do not warn if the page is alread..
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=1554dd42580000
kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=178d832f980000
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
` (3 preceding siblings ...)
2025-10-28 7:45 ` Edward Adam Davis
@ 2025-10-29 3:06 ` Edward Adam Davis
2025-10-29 4:24 ` syzbot
2025-10-29 5:23 ` [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci Edward Adam Davis
2025-10-29 22:51 ` Ryusuke Konishi
6 siblings, 1 reply; 13+ messages in thread
From: Edward Adam Davis @ 2025-10-29 3:06 UTC (permalink / raw)
To: syzbot+24d8b70f039151f65590; +Cc: linux-kernel, syzkaller-bugs
#syz test
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..deee16bc9d4e 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2768,7 +2768,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
if (sci->sc_task) {
wake_up(&sci->sc_wait_daemon);
- kthread_stop(sci->sc_task);
+ if (kthread_stop(sci->sc_task)) {
+ spin_lock(&sci->sc_state_lock);
+ sci->sc_task = NULL;
+ timer_shutdown_sync(&sci->sc_timer);
+ spin_unlock(&sci->sc_state_lock);
+ }
}
spin_lock(&sci->sc_state_lock);
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2)
2025-10-29 3:06 ` Edward Adam Davis
@ 2025-10-29 4:24 ` syzbot
0 siblings, 0 replies; 13+ messages in thread
From: syzbot @ 2025-10-29 4:24 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+24d8b70f039151f65590@syzkaller.appspotmail.com
Tested-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Tested on:
commit: b98c94ee arm64: mte: Do not warn if the page is alread..
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=11a09c92580000
kernel config: https://syzkaller.appspot.com/x/.config?x=158bd6857eb7a550
dashboard link: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=128b8fe2580000
Note: testing is done by a robot and is best-effort only.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
` (4 preceding siblings ...)
2025-10-29 3:06 ` Edward Adam Davis
@ 2025-10-29 5:23 ` Edward Adam Davis
2025-10-29 10:17 ` Ryusuke Konishi
2025-10-29 22:51 ` Ryusuke Konishi
6 siblings, 1 reply; 13+ messages in thread
From: Edward Adam Davis @ 2025-10-29 5:23 UTC (permalink / raw)
To: syzbot+24d8b70f039151f65590
Cc: konishi.ryusuke, linux-kernel, linux-nilfs, syzkaller-bugs
Because kthread_stop did not stop sc_task properly and returned -EINTR,
the sc_timer was not properly closed, ultimately causing the problem [1]
reported by syzbot when freeing sci due to the sc_timer not being closed.
Because the thread sc_task main function nilfs_segctor_thread() returns 0
when it succeeds, when the return value of kthread_stop() is not 0 in
nilfs_segctor_destroy(), we believe that it has not properly closed sc_timer.
We use timer_shutdown_sync() to sync wait for sc_timer to shutdown, and set
the value of sc_task to NULL under the protection of lock sc_state_lock,
so as to avoid the issue caused by sc_timer not being properly shutdowned.
[1]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout
Call trace:
nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
Reported-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
Tested-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
---
fs/nilfs2/segment.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..deee16bc9d4e 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2768,7 +2768,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
if (sci->sc_task) {
wake_up(&sci->sc_wait_daemon);
- kthread_stop(sci->sc_task);
+ if (kthread_stop(sci->sc_task)) {
+ spin_lock(&sci->sc_state_lock);
+ sci->sc_task = NULL;
+ timer_shutdown_sync(&sci->sc_timer);
+ spin_unlock(&sci->sc_state_lock);
+ }
}
spin_lock(&sci->sc_state_lock);
--
2.43.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci
2025-10-29 5:23 ` [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci Edward Adam Davis
@ 2025-10-29 10:17 ` Ryusuke Konishi
0 siblings, 0 replies; 13+ messages in thread
From: Ryusuke Konishi @ 2025-10-29 10:17 UTC (permalink / raw)
To: Edward Adam Davis
Cc: syzbot+24d8b70f039151f65590, linux-kernel, linux-nilfs,
syzkaller-bugs
On Wed, Oct 29, 2025 at 2:23 PM Edward Adam Davis wrote:
>
> Because kthread_stop did not stop sc_task properly and returned -EINTR,
> the sc_timer was not properly closed, ultimately causing the problem [1]
> reported by syzbot when freeing sci due to the sc_timer not being closed.
>
> Because the thread sc_task main function nilfs_segctor_thread() returns 0
> when it succeeds, when the return value of kthread_stop() is not 0 in
> nilfs_segctor_destroy(), we believe that it has not properly closed sc_timer.
> We use timer_shutdown_sync() to sync wait for sc_timer to shutdown, and set
> the value of sc_task to NULL under the protection of lock sc_state_lock,
> so as to avoid the issue caused by sc_timer not being properly shutdowned.
>
> [1]
> ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout
> Call trace:
> nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
> nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
> nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
>
> Reported-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
> Tested-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
> Signed-off-by: Edward Adam Davis <eadavis@qq.com>
> ---
> fs/nilfs2/segment.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
> index f15ca6fc400d..deee16bc9d4e 100644
> --- a/fs/nilfs2/segment.c
> +++ b/fs/nilfs2/segment.c
> @@ -2768,7 +2768,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
>
> if (sci->sc_task) {
> wake_up(&sci->sc_wait_daemon);
> - kthread_stop(sci->sc_task);
> + if (kthread_stop(sci->sc_task)) {
> + spin_lock(&sci->sc_state_lock);
> + sci->sc_task = NULL;
> + timer_shutdown_sync(&sci->sc_timer);
> + spin_unlock(&sci->sc_state_lock);
> + }
> }
>
> spin_lock(&sci->sc_state_lock);
> --
> 2.43.0
Thanks, Edward!
I spent a little while wondering if kthread_stop() could actually
return a non-zero value (such as -EINTR), but then I realized you'd
actually tested it with syzbot and confirmed that it could happen and
that this was causing the problem.
I'll send this fix upstream.
Thanks,
Ryusuke Konishi
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
` (5 preceding siblings ...)
2025-10-29 5:23 ` [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci Edward Adam Davis
@ 2025-10-29 22:51 ` Ryusuke Konishi
6 siblings, 0 replies; 13+ messages in thread
From: Ryusuke Konishi @ 2025-10-29 22:51 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-nilfs, syzbot+24d8b70f039151f65590, Edward Adam Davis,
syzkaller-bugs, linux-kernel
From: Edward Adam Davis <eadavis@qq.com>
Because kthread_stop did not stop sc_task properly and returned -EINTR,
the sc_timer was not properly closed, ultimately causing the problem [1]
reported by syzbot when freeing sci due to the sc_timer not being closed.
Because the thread sc_task main function nilfs_segctor_thread() returns 0
when it succeeds, when the return value of kthread_stop() is not 0 in
nilfs_segctor_destroy(), we believe that it has not properly closed
sc_timer.
We use timer_shutdown_sync() to sync wait for sc_timer to shutdown, and set
the value of sc_task to NULL under the protection of lock sc_state_lock,
so as to avoid the issue caused by sc_timer not being properly shutdowned.
[1]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout
Call trace:
nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
Reported-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=24d8b70f039151f65590
Tested-by: syzbot+24d8b70f039151f65590@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Fixes: 3f66cc261ccb ("nilfs2: use kthread_create and kthread_stop for the log writer thread")
Cc: <stable@vger.kernel.org> # 6.12+
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
---
Hi Andrew,
Please apply this patch as a bug fix. It addresses a recently reported
issue by syzbot, where a timer might not be properly shut down.
Thanks,
Ryusuke Konishi
fs/nilfs2/segment.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index f15ca6fc400d..deee16bc9d4e 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2768,7 +2768,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
if (sci->sc_task) {
wake_up(&sci->sc_wait_daemon);
- kthread_stop(sci->sc_task);
+ if (kthread_stop(sci->sc_task)) {
+ spin_lock(&sci->sc_state_lock);
+ sci->sc_task = NULL;
+ timer_shutdown_sync(&sci->sc_timer);
+ spin_unlock(&sci->sc_state_lock);
+ }
}
spin_lock(&sci->sc_state_lock);
--
2.43.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-10-29 22:52 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-27 21:18 [syzbot] [nilfs?] WARNING: ODEBUG bug in nilfs_detach_log_writer (2) syzbot
2025-10-27 22:17 ` Ryusuke Konishi
2025-10-28 3:26 ` Edward Adam Davis
2025-10-28 4:07 ` syzbot
2025-10-28 5:16 ` Edward Adam Davis
2025-10-28 6:54 ` syzbot
2025-10-28 7:45 ` Edward Adam Davis
2025-10-28 8:09 ` syzbot
2025-10-29 3:06 ` Edward Adam Davis
2025-10-29 4:24 ` syzbot
2025-10-29 5:23 ` [PATCH] nilfs2: Avoid having an active sc_timer before freeing sci Edward Adam Davis
2025-10-29 10:17 ` Ryusuke Konishi
2025-10-29 22:51 ` Ryusuke Konishi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox