Hello,
syzbot has tested the proposed patch but the reproducer still triggered
crash:
WARNING: inconsistent lock state
================================
WARNING: inconsistent lock state
4.17.0-rc2+ #1 Not tainted
--------------------------------
inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
syz-executor3/14919 [HC1[1]:SC0[0]:HE0:SE1] takes:
(ptrval) (fs_reclaim){?.+.}, at:
fs_reclaim_acquire.part.82+0x0/0x30 mm/page_alloc.c:463
{HARDIRQ-ON-W} state was registered at:
lock_acquire+0x1dc/0x520 kernel/locking/lockdep.c:3920
fs_reclaim_acquire.part.82+0x24/0x30 mm/page_alloc.c:3739
fs_reclaim_acquire+0x14/0x20 mm/page_alloc.c:3740
slab_pre_alloc_hook mm/slab.h:418 [inline]
slab_alloc_node mm/slab.c:3299 [inline]
kmem_cache_alloc_node_trace+0x39/0x770 mm/slab.c:3661
kmalloc_node include/linux/slab.h:550 [inline]
kzalloc_node include/linux/slab.h:712 [inline]
alloc_worker+0xbd/0x2e0 kernel/workqueue.c:1704
init_rescuer.part.25+0x1f/0x190 kernel/workqueue.c:4000
init_rescuer kernel/workqueue.c:3997 [inline]
workqueue_init+0x51f/0x7d0 kernel/workqueue.c:5732
kernel_init_freeable+0x2ad/0x58e init/main.c:1115
kernel_init+0x11/0x1b3 init/main.c:1053
ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:412
irq event stamp: 1324
hardirqs last enabled at (1323): [<ffffffff81b5a789>] qlink_free
mm/kasan/quarantine.c:150 [inline]
hardirqs last enabled at (1323): [<ffffffff81b5a789>]
qlist_free_all+0xe9/0x160 mm/kasan/quarantine.c:166
hardirqs last disabled at (1324): [<ffffffff87800905>]
interrupt_entry+0xb5/0xf0 arch/x86/entry/entry_64.S:625
softirqs last enabled at (296): [<ffffffff87a00778>]
__do_softirq+0x778/0xaf5 kernel/softirq.c:311
softirqs last disabled at (217): [<ffffffff814750c1>] invoke_softirq
kernel/softirq.c:365 [inline]
softirqs last disabled at (217): [<ffffffff814750c1>] irq_exit+0x1d1/0x200
kernel/softirq.c:405
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(fs_reclaim);
<Interrupt>
lock(fs_reclaim);
*** DEADLOCK ***
1 lock held by syz-executor3/14919:
#0: (ptrval) (remove_cache_srcu){....}, at:
quarantine_reduce+0x3f/0x170 mm/kasan/quarantine.c:261
stack backtrace:
CPU: 0 PID: 14919 Comm: syz-executor3 Not tainted 4.17.0-rc2+ #1
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
print_usage_bug.cold.59+0x320/0x41a kernel/locking/lockdep.c:2542
valid_state kernel/locking/lockdep.c:2555 [inline]
mark_lock_irq kernel/locking/lockdep.c:2749 [inline]
mark_lock+0x1034/0x19e0 kernel/locking/lockdep.c:3147
mark_irqflags kernel/locking/lockdep.c:3022 [inline]
__lock_acquire+0x1595/0x5140 kernel/locking/lockdep.c:3388
lock_acquire+0x1dc/0x520 kernel/locking/lockdep.c:3920
fs_reclaim_acquire.part.82+0x24/0x30 mm/page_alloc.c:3739
fs_reclaim_acquire+0x14/0x20 mm/page_alloc.c:3740
slab_pre_alloc_hook mm/slab.h:418 [inline]
slab_alloc mm/slab.c:3378 [inline]
__do_kmalloc mm/slab.c:3716 [inline]
__kmalloc+0x45/0x760 mm/slab.c:3727
kmalloc_array include/linux/slab.h:631 [inline]
kcalloc include/linux/slab.h:642 [inline]
numa_crng_init drivers/char/random.c:798 [inline]
crng_reseed+0x427/0x920 drivers/char/random.c:923
credit_entropy_bits+0x98d/0xa30 drivers/char/random.c:708
add_interrupt_randomness+0x494/0x860 drivers/char/random.c:1254
handle_irq_event_percpu+0xf9/0x1c0 kernel/irq/handle.c:191
handle_irq_event+0xa7/0x135 kernel/irq/handle.c:206
handle_edge_irq+0x20f/0x870 kernel/irq/chip.c:791
generic_handle_irq_desc include/linux/irqdesc.h:159 [inline]
handle_irq+0x18c/0x2e7 arch/x86/kernel/irq_64.c:77
do_IRQ+0x78/0x190 arch/x86/kernel/irq.c:245
common_interrupt+0xf/0xf arch/x86/entry/entry_64.S:642
</IRQ>
RIP: 0010:qlink_to_object mm/kasan/quarantine.c:136 [inline]
RIP: 0010:qlink_free mm/kasan/quarantine.c:141 [inline]
RIP: 0010:qlist_free_all+0x3e/0x160 mm/kasan/quarantine.c:166
RSP: 0018:ffff8801bb507b58 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffda
RAX: ffff8801b13cdcc0 RBX: 0000000000000286 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffea0006c304df RDI: 0000000000000286
RBP: ffff8801bb507b90 R08: ffff8801ac7cef38 R09: 0000000000000006
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: ffff8801da94a500 R14: ffff8801b13cdcc0 R15: ffffffff88d18ae0
quarantine_reduce+0x141/0x170 mm/kasan/quarantine.c:259
kasan_kmalloc+0x99/0xe0 mm/kasan/kasan.c:538
kasan_slab_alloc+0x12/0x20 mm/kasan/kasan.c:490
slab_post_alloc_hook mm/slab.h:444 [inline]
slab_alloc mm/slab.c:3392 [inline]
kmem_cache_alloc+0x11b/0x760 mm/slab.c:3552
getname_flags+0xd0/0x5a0 fs/namei.c:140
getname fs/namei.c:211 [inline]
do_symlinkat+0x83/0x2b0 fs/namei.c:4113
__do_sys_symlink fs/namei.c:4143 [inline]
__se_sys_symlink fs/namei.c:4141 [inline]
__ia32_sys_symlink+0x57/0x80 fs/namei.c:4141
do_syscall_32_irqs_on arch/x86/entry/common.c:323 [inline]
do_fast_syscall_32+0x345/0xf9b arch/x86/entry/common.c:394
entry_SYSENTER_compat+0x70/0x7f arch/x86/entry/entry_64_compat.S:139
RIP: 0023:0xf7f68cb9
RSP: 002b:00000000ffeb3f1c EFLAGS: 00000246 ORIG_RAX: 0000000000000053
RAX: ffffffffffffffda RBX: 00000000ffeb4c5c RCX: 00000000080d0eea
RDX: 0000000000000003 RSI: 00000000000000fb RDI: 0000000000004c01
RBP: 0000000000000771 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
BUG: sleeping function called from invalid context at mm/slab.h:421
in_atomic(): 1, irqs_disabled(): 1, pid: 14919, name: syz-executor3
INFO: lockdep is turned off.
irq event stamp: 1324
hardirqs last enabled at (1323): [<ffffffff81b5a789>] qlink_free
mm/kasan/quarantine.c:150 [inline]
hardirqs last enabled at (1323): [<ffffffff81b5a789>]
qlist_free_all+0xe9/0x160 mm/kasan/quarantine.c:166
hardirqs last disabled at (1324): [<ffffffff87800905>]
interrupt_entry+0xb5/0xf0 arch/x86/entry/entry_64.S:625
softirqs last enabled at (296): [<ffffffff87a00778>]
__do_softirq+0x778/0xaf5 kernel/softirq.c:311
softirqs last disabled at (217): [<ffffffff814750c1>] invoke_softirq
kernel/softirq.c:365 [inline]
softirqs last disabled at (217): [<ffffffff814750c1>] irq_exit+0x1d1/0x200
kernel/softirq.c:405
CPU: 0 PID: 14919 Comm: syz-executor3 Not tainted 4.17.0-rc2+ #1
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
___might_sleep.cold.87+0x11f/0x13a kernel/sched/core.c:6188
__might_sleep+0x95/0x190 kernel/sched/core.c:6141
slab_pre_alloc_hook mm/slab.h:421 [inline]
slab_alloc mm/slab.c:3378 [inline]
__do_kmalloc mm/slab.c:3716 [inline]
__kmalloc+0x2b9/0x760 mm/slab.c:3727
kmalloc_array include/linux/slab.h:631 [inline]
kcalloc include/linux/slab.h:642 [inline]
numa_crng_init drivers/char/random.c:798 [inline]
crng_reseed+0x427/0x920 drivers/char/random.c:923
credit_entropy_bits+0x98d/0xa30 drivers/char/random.c:708
add_interrupt_randomness+0x494/0x860 drivers/char/random.c:1254
handle_irq_event_percpu+0xf9/0x1c0 kernel/irq/handle.c:191
handle_irq_event+0xa7/0x135 kernel/irq/handle.c:206
handle_edge_irq+0x20f/0x870 kernel/irq/chip.c:791
generic_handle_irq_desc include/linux/irqdesc.h:159 [inline]
handle_irq+0x18c/0x2e7 arch/x86/kernel/irq_64.c:77
do_IRQ+0x78/0x190 arch/x86/kernel/irq.c:245
common_interrupt+0xf/0xf arch/x86/entry/entry_64.S:642
</IRQ>
RIP: 0010:qlink_to_object mm/kasan/quarantine.c:136 [inline]
RIP: 0010:qlink_free mm/kasan/quarantine.c:141 [inline]
RIP: 0010:qlist_free_all+0x3e/0x160 mm/kasan/quarantine.c:166
RSP: 0018:ffff8801bb507b58 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffda
RAX: ffff8801b13cdcc0 RBX: 0000000000000286 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffea0006c304df RDI: 0000000000000286
RBP: ffff8801bb507b90 R08: ffff8801ac7cef38 R09: 0000000000000006
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: ffff8801da94a500 R14: ffff8801b13cdcc0 R15: ffffffff88d18ae0
quarantine_reduce+0x141/0x170 mm/kasan/quarantine.c:259
kasan_kmalloc+0x99/0xe0 mm/kasan/kasan.c:538
kasan_slab_alloc+0x12/0x20 mm/kasan/kasan.c:490
slab_post_alloc_hook mm/slab.h:444 [inline]
slab_alloc mm/slab.c:3392 [inline]
kmem_cache_alloc+0x11b/0x760 mm/slab.c:3552
getname_flags+0xd0/0x5a0 fs/namei.c:140
getname fs/namei.c:211 [inline]
do_symlinkat+0x83/0x2b0 fs/namei.c:4113
__do_sys_symlink fs/namei.c:4143 [inline]
__se_sys_symlink fs/namei.c:4141 [inline]
__ia32_sys_symlink+0x57/0x80 fs/namei.c:4141
do_syscall_32_irqs_on arch/x86/entry/common.c:323 [inline]
do_fast_syscall_32+0x345/0xf9b arch/x86/entry/common.c:394
entry_SYSENTER_compat+0x70/0x7f arch/x86/entry/entry_64_compat.S:139
RIP: 0023:0xf7f68cb9
RSP: 002b:00000000ffeb3f1c EFLAGS: 00000246 ORIG_RAX: 0000000000000053
RAX: ffffffffffffffda RBX: 00000000ffeb4c5c RCX: 00000000080d0eea
RDX: 0000000000000003 RSI: 00000000000000fb RDI: 0000000000004c01
RBP: 0000000000000771 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
random: crng init done
Tested on net commit
25eb0ea7174c6e84f21fa59dccbddd0318b17b12 (Thu Apr 26 02:55:33 2018 +0000)
Merge git://
git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
compiler: gcc (GCC) 8.0.1 20180413 (experimental)
Patch:
https://syzkaller.appspot.com/x/patch.diff?id=6538742961537024
Kernel config:
https://syzkaller.appspot.com/x/.config?id=7043958930931867332
Raw console output:
https://syzkaller.appspot.com/x/log.txt?id=5410319962734592