====================================================== WARNING: possible circular locking dependency detected 5.9.0-rc1-syzkaller #0 Not tainted ------------------------------------------------------ kworker/0:5/8441 is trying to acquire lock: ffff88811de48790 (&sb->s_type->i_mutex_key#13){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:779 [inline] ffff88811de48790 (&sb->s_type->i_mutex_key#13){+.+.}-{3:3}, at: __sock_release+0x28/0xa0 net/socket.c:595 but task is already holding lock: ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: set_work_data kernel/workqueue.c:615 [inline] ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: set_work_pool_and_clear_pending kernel/workqueue.c:643 [inline] ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: process_one_work+0x1de/0x5f0 kernel/workqueue.c:2240 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #3 ((delayed_fput_work).work){+.+.}-{0:0}: process_one_work+0x23e/0x5f0 kernel/workqueue.c:2245 worker_thread+0x38/0x380 kernel/workqueue.c:2415 kthread+0x148/0x170 kernel/kthread.c:292 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294 -> #2 ((wq_completion)events){+.+.}-{0:0}: flush_workqueue+0xa6/0x590 kernel/workqueue.c:2780 flush_scheduled_work include/linux/workqueue.h:597 [inline] tipc_exit_net+0x23/0x170 net/tipc/core.c:116 ops_exit_list.isra.9+0x31/0x60 net/core/net_namespace.c:186 cleanup_net+0x273/0x3d0 net/core/net_namespace.c:603 process_one_work+0x26a/0x5f0 kernel/workqueue.c:2269 worker_thread+0x38/0x380 kernel/workqueue.c:2415 kthread+0x148/0x170 kernel/kthread.c:292 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294 -> #1 (pernet_ops_rwsem){++++}-{3:3}: down_write+0x33/0x70 kernel/locking/rwsem.c:1531 unregister_netdevice_notifier+0x17/0xb0 net/core/dev.c:1861 bcm_release+0x30/0x1c0 net/can/bcm.c:1474 __sock_release+0x32/0xa0 net/socket.c:596 sock_close+0xf/0x20 net/socket.c:1277 __fput+0xaa/0x250 fs/file_table.c:281 task_work_run+0x68/0xb0 kernel/task_work.c:141 tracehook_notify_resume include/linux/tracehook.h:188 [inline] exit_to_user_mode_loop kernel/entry/common.c:140 [inline] exit_to_user_mode_prepare+0x1e2/0x1f0 kernel/entry/common.c:167 syscall_exit_to_user_mode+0x59/0x2b0 kernel/entry/common.c:242 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #0 (&sb->s_type->i_mutex_key#13){+.+.}-{3:3}: check_prev_add kernel/locking/lockdep.c:2496 [inline] check_prevs_add kernel/locking/lockdep.c:2601 [inline] validate_chain kernel/locking/lockdep.c:3218 [inline] __lock_acquire+0x1056/0x16c0 kernel/locking/lockdep.c:4426 lock_acquire+0xd0/0x3e0 kernel/locking/lockdep.c:5005 down_write+0x33/0x70 kernel/locking/rwsem.c:1531 inode_lock include/linux/fs.h:779 [inline] __sock_release+0x28/0xa0 net/socket.c:595 sock_close+0xf/0x20 net/socket.c:1277 __fput+0xaa/0x250 fs/file_table.c:281 delayed_fput+0x17/0x30 fs/file_table.c:309 process_one_work+0x26a/0x5f0 kernel/workqueue.c:2269 worker_thread+0x38/0x380 kernel/workqueue.c:2415 kthread+0x148/0x170 kernel/kthread.c:292 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294 other info that might help us debug this: Chain exists of: &sb->s_type->i_mutex_key#13 --> (wq_completion)events --> (delayed_fput_work).work Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock((delayed_fput_work).work); lock((wq_completion)events); lock((delayed_fput_work).work); lock(&sb->s_type->i_mutex_key#13); *** DEADLOCK *** 2 locks held by kworker/0:5/8441: #0: ffff88812bc55738 ((wq_completion)events){+.+.}-{0:0}, at: set_work_data kernel/workqueue.c:615 [inline] #0: ffff88812bc55738 ((wq_completion)events){+.+.}-{0:0}, at: set_work_pool_and_clear_pending kernel/workqueue.c:643 [inline] #0: ffff88812bc55738 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x1de/0x5f0 kernel/workqueue.c:2240 #1: ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: set_work_data kernel/workqueue.c:615 [inline] #1: ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: set_work_pool_and_clear_pending kernel/workqueue.c:643 [inline] #1: ffffc90001057e70 ((delayed_fput_work).work){+.+.}-{0:0}, at: process_one_work+0x1de/0x5f0 kernel/workqueue.c:2240 stack backtrace: CPU: 0 PID: 8441 Comm: kworker/0:5 Not tainted 5.9.0-rc1-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: events delayed_fput Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0xb3/0xec lib/dump_stack.c:118 check_noncircular+0x165/0x180 kernel/locking/lockdep.c:1827 check_prev_add kernel/locking/lockdep.c:2496 [inline] check_prevs_add kernel/locking/lockdep.c:2601 [inline] validate_chain kernel/locking/lockdep.c:3218 [inline] __lock_acquire+0x1056/0x16c0 kernel/locking/lockdep.c:4426 lock_acquire+0xd0/0x3e0 kernel/locking/lockdep.c:5005 down_write+0x33/0x70 kernel/locking/rwsem.c:1531 inode_lock include/linux/fs.h:779 [inline] __sock_release+0x28/0xa0 net/socket.c:595 sock_close+0xf/0x20 net/socket.c:1277 __fput+0xaa/0x250 fs/file_table.c:281 delayed_fput+0x17/0x30 fs/file_table.c:309 process_one_work+0x26a/0x5f0 kernel/workqueue.c:2269 worker_thread+0x38/0x380 kernel/workqueue.c:2415 kthread+0x148/0x170 kernel/kthread.c:292 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294