possible deadlock in ntfs_readdir

Status: upstream: reported syz repro on 2026/06/29 20:04
Subsystems: ntfs3
Labels: prio:high
[Documentation on labels]
Reported-by: syzbot+cfc6e8106bec1c524f7d@syzkaller.appspotmail.com
First crash: 105d, last: 5d02h
Cause bisection: introduced by (bisect log) :
commit d62cf685d12e95cc0a4122c43cd9f0eb8bba0b4c
Author: ZhengYuan Huang <gality369@gmail.com>
Date: Mon Apr 27 07:26:50 2026 +0000

  fs/ntfs3: hold ni_lock across readdir metadata walk

Crash: possible deadlock in ntfs_readdir (log)
Repro: syz .config
  
▶ ▼ ✨ AI Jobs (1)
ID Workflow Result Correct Bug Created Started Finished Revision
539b4b5b assessment-security DenialOfService: ❌ Exploitable: ❌ FilesystemTrigger: ✅ NetworkTrigger: ❌ PeripheralTrigger: ✅ RemoteTrigger: ❌ Unprivileged: ✅ UserNamespace: ✅ VMGuestTrigger: ❌ VMHostTrigger: ❌ ❓ possible deadlock in ntfs_readdir 2026/06/27 01:05 2026/06/27 01:05 2026/06/27 01:50 7ff32d8b
▶ ▼ Discussions (4)
Title Replies (including bot) Last reply
[syzbot] Monthly ntfs3 report (Oct 2026) 0 (1) 2026/10/05 20:33
[syzbot] [ntfs3?] possible deadlock in ntfs_readdir 0 (3) 2026/09/05 23:39
[syzbot] Monthly ntfs3 report (Sep 2026) 0 (1) 2026/09/04 12:33
[PATCH 2/2] ntfs3: release ni_lock before dir_emit in ntfs_readdir to fix deadlocks 1 (1) 2026/07/01 01:30
▶ ▼ Cause bisection attempts (3)
Created Duration User Patch Repo Result
2026/09/05 15:51 7h46m bisect upstream OK (1) job log log
2026/08/26 21:17 0m bisect upstream error
2026/08/09 14:25 0m bisect upstream error

Sample crash report:
ntfs3(loop1): failed to c
ntfs3(loop1): failed to convert "0080" to macinuit
======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Not tainted
------------------------------------------------------
syz.1.272/6734 is trying to acquire lock:
ffff88802c5862b0 (&mm->mmap_lock){++++}-{4:4}, at: mmap_read_lock_killable+0x1d/0x70 include/linux/mmap_lock.h:609

but task is already holding lock:
ffff88805e9f6478 (&ni->ni_lock/5){+.+.}-{4:4}, at: ni_lock fs/ntfs3/ntfs_fs.h:1247 [inline]
ffff88805e9f6478 (&ni->ni_lock/5){+.+.}-{4:4}, at: ntfs_readdir+0x717/0xf70 fs/ntfs3/dir.c:541

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&ni->ni_lock/5){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/rtmutex_api.c:561 [inline]
       mutex_lock_nested+0x5a/0x1d0 kernel/locking/rtmutex_api.c:580
       ni_lock fs/ntfs3/ntfs_fs.h:1247 [inline]
       attr_data_get_block+0x1cd/0x2c0 fs/ntfs3/attrib.c:976
       ntfs_file_mmap_prepare+0x5b3/0xa20 fs/ntfs3/file.c:430
       vfs_mmap_prepare include/linux/fs.h:2069 [inline]
       call_mmap_prepare mm/vma.c:2776 [inline]
       __mmap_region mm/vma.c:2865 [inline]
       mmap_region+0xea5/0x2220 mm/vma.c:2966
       do_mmap+0xe0e/0x1310 mm/mmap.c:573
       vm_mmap_pgoff+0x275/0x4e0 mm/util.c:581
       ksys_mmap_pgoff+0x4a6/0x720 mm/mmap.c:619
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #0 (&mm->mmap_lock){++++}-{4:4}:
       check_prev_add kernel/locking/lockdep.c:3209 [inline]
       check_prevs_add kernel/locking/lockdep.c:3328 [inline]
       validate_chain kernel/locking/lockdep.c:3952 [inline]
       __lock_acquire+0x164c/0x2de0 kernel/locking/lockdep.c:5288
       lock_acquire+0x115/0x350 kernel/locking/lockdep.c:5942
       down_read_killable+0xa4/0x220 kernel/locking/rwsem.c:1599
       mmap_read_lock_killable+0x1d/0x70 include/linux/mmap_lock.h:609
       get_mmap_lock_carefully mm/mmap_lock.c:450 [inline]
       lock_mm_and_find_vma+0x2d6/0x340 mm/mmap_lock.c:501
       do_user_addr_fault+0x343/0x1340 arch/x86/mm/fault.c:1366
       handle_page_fault arch/x86/mm/fault.c:1483 [inline]
       exc_page_fault+0x6a/0xc0 arch/x86/mm/fault.c:1536
       asm_exc_page_fault+0x26/0x30 arch/x86/include/asm/idtentry.h:595
       filldir64+0x2bc/0x620 fs/readdir.c:-1
       dir_emit include/linux/fs.h:3607 [inline]
       ntfs_dir_emit fs/ntfs3/dir.c:388 [inline]
       ntfs_read_hdr+0x8a7/0xc10 fs/ntfs3/dir.c:429
       ntfs_readdir+0x9ab/0xf70 fs/ntfs3/dir.c:589
       iterate_dir+0x2f1/0x4e0 fs/readdir.c:110
       __do_sys_getdents64 fs/readdir.c:399 [inline]
       __se_sys_getdents64+0xf1/0x280 fs/readdir.c:384
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&ni->ni_lock/5);
                               lock(&mm->mmap_lock);
                               lock(&ni->ni_lock/5);
  rlock(&mm->mmap_lock);

 *** DEADLOCK ***

locks held by syz.1.272/6734: 3, last CPU#1:
 #0: ffff888036d02d28 (&f->f_pos_lock){+.+.}-{4:4}, at: fdget_pos+0x252/0x320 fs/file.c:1259
 #1: ffff88805e9f6740 (&type->i_mutex_dir_key#8){++++}-{4:4}, at: iterate_dir+0x215/0x4e0 fs/readdir.c:103
 #2: ffff88805e9f6478 (&ni->ni_lock/5){+.+.}-{4:4}, at: ni_lock fs/ntfs3/ntfs_fs.h:1247 [inline]
 #2: ffff88805e9f6478 (&ni->ni_lock/5){+.+.}-{4:4}, at: ntfs_readdir+0x717/0xf70 fs/ntfs3/dir.c:541

stack backtrace:
CPU: 1 UID: 0 PID: 6734 Comm: syz.1.272 Not tainted syzkaller #0 PREEMPT_{RT,(full)} 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/24/2026
Call Trace:
 <TASK>
 dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
 print_circular_bug+0x2e2/0x300 kernel/locking/lockdep.c:2087
 check_noncircular+0x12f/0x150 kernel/locking/lockdep.c:2219
 check_prev_add kernel/locking/lockdep.c:3209 [inline]
 check_prevs_add kernel/locking/lockdep.c:3328 [inline]
 validate_chain kernel/locking/lockdep.c:3952 [inline]
 __lock_acquire+0x164c/0x2de0 kernel/locking/lockdep.c:5288
 lock_acquire+0x115/0x350 kernel/locking/lockdep.c:5942
 down_read_killable+0xa4/0x220 kernel/locking/rwsem.c:1599
 mmap_read_lock_killable+0x1d/0x70 include/linux/mmap_lock.h:609
 get_mmap_lock_carefully mm/mmap_lock.c:450 [inline]
 lock_mm_and_find_vma+0x2d6/0x340 mm/mmap_lock.c:501
 do_user_addr_fault+0x343/0x1340 arch/x86/mm/fault.c:1366
 handle_page_fault arch/x86/mm/fault.c:1483 [inline]
 exc_page_fault+0x6a/0xc0 arch/x86/mm/fault.c:1536
 asm_exc_page_fault+0x26/0x30 arch/x86/include/asm/idtentry.h:595
RIP: 0010:filldir64+0x2bc/0x620 fs/readdir.c:369
Code: ea 2f 7f ff 0f 01 cb 48 8b 44 24 28 49 89 47 08 48 bd 00 00 00 00 00 fc ff df 48 8b 44 24 58 48 89 03 8b 4c 24 04 48 8d 43 10 <66> 89 08 8b 4c 24 14 80 e1 0f 48 8d 43 12 88 08 4a 8d 04 2b 48 83
RSP: 0018:ffffc90005bb7ab0 EFLAGS: 00050293
RAX: 0000200000001000 RBX: 0000200000000ff0 RCX: 0000000000000020
RDX: 0000000000000000 RSI: 0000000000000009 RDI: 0000000000000007
RBP: dffffc0000000000 R08: 0000000000000000 R09: 0000000000000000
R10: dffffc0000000000 R11: ffffed10061833e9 R12: ffff88806291e000
R13: 0000000000000009 R14: 0000000000000009 R15: 0000200000000fd8
 dir_emit include/linux/fs.h:3607 [inline]
 ntfs_dir_emit fs/ntfs3/dir.c:388 [inline]
 ntfs_read_hdr+0x8a7/0xc10 fs/ntfs3/dir.c:429
 ntfs_readdir+0x9ab/0xf70 fs/ntfs3/dir.c:589
 iterate_dir+0x2f1/0x4e0 fs/readdir.c:110
 __do_sys_getdents64 fs/readdir.c:399 [inline]
 __se_sys_getdents64+0xf1/0x280 fs/readdir.c:384
 do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
 do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f2d71cde159
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f2d7133e028 EFLAGS: 00000246 ORIG_RAX: 00000000000000d9
RAX: ffffffffffffffda RBX: 00007f2d71f65fa0 RCX: 00007f2d71cde159
RDX: 00000000000000e0 RSI: 0000200000000fc0 RDI: 0000000000000004
RBP: 00007f2d71d7506b R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007f2d71f66038 R14: 00007f2d71f65fa0 R15: 00007ffefc74e278
 </TASK>
----------------
Code disassembly (best guess), 2 bytes skipped:
   0:	7f ff                	jg     0x1
   2:	0f 01 cb             	stac
   5:	48 8b 44 24 28       	mov    0x28(%rsp),%rax
   a:	49 89 47 08          	mov    %rax,0x8(%r15)
   e:	48 bd 00 00 00 00 00 	movabs $0xdffffc0000000000,%rbp
  15:	fc ff df
  18:	48 8b 44 24 58       	mov    0x58(%rsp),%rax
  1d:	48 89 03             	mov    %rax,(%rbx)
  20:	8b 4c 24 04          	mov    0x4(%rsp),%ecx
  24:	48 8d 43 10          	lea    0x10(%rbx),%rax
* 28:	66 89 08             	mov    %cx,(%rax) <-- trapping instruction
  2b:	8b 4c 24 14          	mov    0x14(%rsp),%ecx
  2f:	80 e1 0f             	and    $0xf,%cl
  32:	48 8d 43 12          	lea    0x12(%rbx),%rax
  36:	88 08                	mov    %cl,(%rax)
  38:	4a 8d 04 2b          	lea    (%rbx,%r13,1),%rax
  3c:	48                   	rex.W
  3d:	83                   	.byte 0x83

Crashes (104):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/09/20 09:22 upstream 518e5b794c06 853b104b .config strace log report syz / log [disk image] [vmlinux] [kernel image] [mounted in repro] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/02 03:38 upstream 02dc699f83d0 e611ffe1 .config console log report syz / log [disk image] [vmlinux] [kernel image] [mounted in repro] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/10/04 09:21 upstream a74306e2e676 57bbd979 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/28 15:15 upstream 72d3fcf802c4 a3c7249d .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/23 21:21 upstream fe2ec83746e5 abce1216 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/22 08:16 upstream f0100363d8c3 e12281bd .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/22 08:11 upstream f0100363d8c3 e12281bd .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/21 11:45 upstream 93f51579e7df 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/21 09:44 upstream 93f51579e7df 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/20 17:56 upstream 518e5b794c06 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/20 04:51 upstream 518e5b794c06 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/19 23:40 upstream 40288c9206c1 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/19 06:39 upstream 17e7b8eacf4c 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/18 19:27 upstream 5dd1818b15d9 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/18 13:04 upstream 5dd1818b15d9 853b104b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/17 06:20 upstream 238650ef6c7c 95928915 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/16 10:36 upstream 9b87fdc9af2f 12a0a44a .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/15 10:07 upstream 587858367581 81a27d1a .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/14 17:25 upstream 704340f1cd0d 81a27d1a .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/14 08:57 upstream 704340f1cd0d 70a60e12 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/14 00:04 upstream d681d7ef617e 70a60e12 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/12 06:21 upstream 3026c6e4f223 70a60e12 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/10 12:35 upstream 50d05c7c76c9 1fe56c0a .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/08 23:57 upstream 5acbae5f7eb3 243b72f1 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/04 21:05 upstream bc35965f6940 f65209a4 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/01 03:15 upstream bf1079577a11 316d9396 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/31 07:53 upstream a23cbb05744b 2f52988a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-root possible deadlock in ntfs_readdir
2026/08/25 20:41 upstream 66498c75b4f8 a9a1fc32 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/24 21:33 upstream 0a0d1d55dad5 b55bd4c3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/23 14:07 upstream 2709dd5ae32f 1e72964b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/22 21:05 upstream 818bebeb63dd 1e72964b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/19 16:35 upstream bd5f485f3f02 1e72964b .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-root possible deadlock in ntfs_readdir
2026/08/13 07:10 upstream 3d6d817622b0 359b2492 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/12 11:54 upstream f5bbbfec59b4 f8d35649 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/11 08:23 upstream d58772d8520c 508909ea .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/08 17:15 upstream bcc44b6785f2 5d63f80b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/07 00:17 upstream 0d8395707651 c38879ea .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/06 03:47 upstream 0d8395707651 cd5b1963 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/04 03:17 upstream 848acc8ffe1b 9451e17e .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/03 00:23 upstream bd1dde877520 e611ffe1 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/01 13:50 upstream 0131b508c0e2 e611ffe1 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/08/01 10:16 upstream 0131b508c0e2 e611ffe1 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/07/31 04:42 upstream 3708dd948844 aaffb173 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/07/29 23:35 upstream fc02acf6ac0c 6ef5c1e2 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/07/29 13:53 upstream fc02acf6ac0c 19622d9d .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/07/28 06:04 upstream 62cc90241548 45ae1df4 .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/07/26 04:32 upstream 3dab139d4795 492bab15 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-root possible deadlock in ntfs_readdir
2026/06/29 01:21 upstream 8b69c0475871 fb92f11c .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-root possible deadlock in ntfs_readdir
2026/06/26 21:10 upstream 51cb1aa1250c fb92f11c .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/06/25 19:57 upstream a142da0b2d32 7ff32d8b .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs possible deadlock in ntfs_readdir
2026/09/01 12:23 linux-next 89c07d98716a 316d9396 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-linux-next-kasan-gce-root possible deadlock in ntfs_readdir
2026/08/10 08:00 linux-next 6b8c8af514d7 5d63f80b .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-linux-next-kasan-gce-root possible deadlock in ntfs_readdir
* Struck through repros no longer work on HEAD.