1
======================================================
WARNING: possible circular locking dependency detected
6.12.18-android16-1-maybe-dirty-4k #1 Tainted: G            E     
------------------------------------------------------
syz.5.1961/6820 is trying to acquire lock:
ffffff81011cf160 (&type->i_mutex_dir_key#10){++++}-{4:4}, at: inode_lock proc/self/cwd/common/include/linux/fs.h:815 [inline]
ffffff81011cf160 (&type->i_mutex_dir_key#10){++++}-{4:4}, at: vfs_rmdir+0x118/0x488 proc/self/cwd/common/fs/namei.c:4329

but task is already holding lock:
ffffff810107e160 (&type->i_mutex_dir_key#9/1){+.+.}-{4:4}, at: inode_lock_nested proc/self/cwd/common/include/linux/fs.h:850 [inline]
ffffff810107e160 (&type->i_mutex_dir_key#9/1){+.+.}-{4:4}, at: do_rmdir+0x144/0x45c proc/self/cwd/common/fs/namei.c:4387

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&type->i_mutex_dir_key#9/1){+.+.}-{4:4}:
       down_write_nested+0x80/0x560 proc/self/cwd/common/kernel/locking/rwsem.c:1740
       inode_lock_nested proc/self/cwd/common/include/linux/fs.h:850 [inline]
       incfs_lookup_dentry+0x58/0xd4 proc/self/cwd/common/fs/incfs/data_mgmt.c:209
       dir_lookup+0x270/0x4a8 proc/self/cwd/common/fs/incfs/vfs.c:1005
       lookup_open proc/self/cwd/common/fs/namei.c:3573 [inline]
       open_last_lookups proc/self/cwd/common/fs/namei.c:3694 [inline]
       path_openat+0xec0/0x29e0 proc/self/cwd/common/fs/namei.c:3930
       do_filp_open+0x128/0x2e0 proc/self/cwd/common/fs/namei.c:3960
       do_sys_openat2+0xe0/0x15c proc/self/cwd/common/fs/open.c:1438
       do_sys_open proc/self/cwd/common/fs/open.c:1453 [inline]
       __do_sys_openat proc/self/cwd/common/fs/open.c:1469 [inline]
       __se_sys_openat proc/self/cwd/common/fs/open.c:1464 [inline]
       __arm64_sys_openat+0x128/0x164 proc/self/cwd/common/fs/open.c:1464
       __invoke_syscall proc/self/cwd/common/arch/arm64/kernel/syscall.c:35 [inline]
       invoke_syscall+0xa4/0x288 proc/self/cwd/common/arch/arm64/kernel/syscall.c:49
       el0_svc_common+0x138/0x24c proc/self/cwd/common/arch/arm64/kernel/syscall.c:132
       do_el0_svc+0x50/0x64 proc/self/cwd/common/arch/arm64/kernel/syscall.c:151
       el0_svc+0x58/0xb4 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:715
       el0t_64_sync_handler+0x98/0x108 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:733
       el0t_64_sync+0x19c/0x1a0 proc/self/cwd/common/arch/arm64/kernel/entry.S:598

-> #0 (&type->i_mutex_dir_key#10){++++}-{4:4}:
       check_prev_add proc/self/cwd/common/kernel/locking/lockdep.c:3161 [inline]
       check_prevs_add proc/self/cwd/common/kernel/locking/lockdep.c:3280 [inline]
       validate_chain proc/self/cwd/common/kernel/locking/lockdep.c:3904 [inline]
       __lock_acquire+0x2920/0x6cd8 proc/self/cwd/common/kernel/locking/lockdep.c:5202
       lock_acquire+0x1d8/0x574 proc/self/cwd/common/kernel/locking/lockdep.c:5825
       down_write+0x7c/0x55c proc/self/cwd/common/kernel/locking/rwsem.c:1622
       inode_lock proc/self/cwd/common/include/linux/fs.h:815 [inline]
       vfs_rmdir+0x118/0x488 proc/self/cwd/common/fs/namei.c:4329
       do_rmdir+0x1c4/0x45c proc/self/cwd/common/fs/namei.c:4399
       __do_sys_unlinkat proc/self/cwd/common/fs/namei.c:4575 [inline]
       __se_sys_unlinkat proc/self/cwd/common/fs/namei.c:4569 [inline]
       __arm64_sys_unlinkat+0xd0/0x108 proc/self/cwd/common/fs/namei.c:4569
       __invoke_syscall proc/self/cwd/common/arch/arm64/kernel/syscall.c:35 [inline]
       invoke_syscall+0xa4/0x288 proc/self/cwd/common/arch/arm64/kernel/syscall.c:49
       el0_svc_common+0x138/0x24c proc/self/cwd/common/arch/arm64/kernel/syscall.c:132
       do_el0_svc+0x50/0x64 proc/self/cwd/common/arch/arm64/kernel/syscall.c:151
       el0_svc+0x58/0xb4 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:715
       el0t_64_sync_handler+0x98/0x108 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:733
       el0t_64_sync+0x19c/0x1a0 proc/self/cwd/common/arch/arm64/kernel/entry.S:598

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&type->i_mutex_dir_key#9/1);
                               lock(&type->i_mutex_dir_key#10);
                               lock(&type->i_mutex_dir_key#9/1);
  lock(&type->i_mutex_dir_key#10);

 *** DEADLOCK ***

2 locks held by syz.5.1961/6820:
 #0: ffffff80cda1a450 (sb_writers#16){.+.+}-{0:0}, at: mnt_want_write+0x4c/0xa8 proc/self/cwd/common/fs/namespace.c:516
 #1: ffffff810107e160 (&type->i_mutex_dir_key#9/1){+.+.}-{4:4}, at: inode_lock_nested proc/self/cwd/common/include/linux/fs.h:850 [inline]
 #1: ffffff810107e160 (&type->i_mutex_dir_key#9/1){+.+.}-{4:4}, at: do_rmdir+0x144/0x45c proc/self/cwd/common/fs/namei.c:4387

stack backtrace:
CPU: 3 UID: 0 PID: 6820 Comm: syz.5.1961 Tainted: G            E      6.12.18-android16-1-maybe-dirty-4k #1 9af86685e3ad064a54655916afb3d22234382e37
Tainted: [E]=UNSIGNED_MODULE
Hardware name: linux,dummy-virt (DT)
Call trace:
 dump_backtrace+0x18c/0x1bc proc/self/cwd/common/arch/arm64/kernel/stacktrace.c:320
 show_stack+0x34/0x4c proc/self/cwd/common/arch/arm64/kernel/stacktrace.c:328
 __dump_stack proc/self/cwd/common/lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0xc8/0x118 proc/self/cwd/common/lib/dump_stack.c:120
 dump_stack+0x24/0x34 proc/self/cwd/common/lib/dump_stack.c:129
 print_circular_bug+0x158/0x1c4 proc/self/cwd/common/kernel/locking/lockdep.c:2074
 check_noncircular+0x214/0x2f4 proc/self/cwd/common/kernel/locking/lockdep.c:2206
 check_prev_add proc/self/cwd/common/kernel/locking/lockdep.c:3161 [inline]
 check_prevs_add proc/self/cwd/common/kernel/locking/lockdep.c:3280 [inline]
 validate_chain proc/self/cwd/common/kernel/locking/lockdep.c:3904 [inline]
 __lock_acquire+0x2920/0x6cd8 proc/self/cwd/common/kernel/locking/lockdep.c:5202
 lock_acquire+0x1d8/0x574 proc/self/cwd/common/kernel/locking/lockdep.c:5825
 down_write+0x7c/0x55c proc/self/cwd/common/kernel/locking/rwsem.c:1622
 inode_lock proc/self/cwd/common/include/linux/fs.h:815 [inline]
 vfs_rmdir+0x118/0x488 proc/self/cwd/common/fs/namei.c:4329
 do_rmdir+0x1c4/0x45c proc/self/cwd/common/fs/namei.c:4399
 __do_sys_unlinkat proc/self/cwd/common/fs/namei.c:4575 [inline]
 __se_sys_unlinkat proc/self/cwd/common/fs/namei.c:4569 [inline]
 __arm64_sys_unlinkat+0xd0/0x108 proc/self/cwd/common/fs/namei.c:4569
 __invoke_syscall proc/self/cwd/common/arch/arm64/kernel/syscall.c:35 [inline]
 invoke_syscall+0xa4/0x288 proc/self/cwd/common/arch/arm64/kernel/syscall.c:49
 el0_svc_common+0x138/0x24c proc/self/cwd/common/arch/arm64/kernel/syscall.c:132
 do_el0_svc+0x50/0x64 proc/self/cwd/common/arch/arm64/kernel/syscall.c:151
 el0_svc+0x58/0xb4 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:715
 el0t_64_sync_handler+0x98/0x108 proc/self/cwd/common/arch/arm64/kernel/entry-common.c:733
 el0t_64_sync+0x19c/0x1a0 proc/self/cwd/common/arch/arm64/kernel/entry.S:598

For immediate assistance, please email our customer support: [email protected]

Download RAW File