data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-72203 in the interactive tracker

CVE-2026-72203

ntfs: skip extent mft records in writeback to prevent deadlock

7.5 EPSS 0.6% AV:N

Published 2026-08-15 (2 months ago) by the Linux kernel CNA. Subsystem fs/ntfs. Debian urgency: unimportant.

What to do, per Debian release

Debian's own status for CVE-2026-72203 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormwon't fix6.1.190-1Debian has decided against an update for bookworm: NTFS_FS support disabled. Moving to a newer release is the way to get the fix.
Debian 13trixienot affected6.12.113-1Nothing to do. trixie never shipped the vulnerable code.
Debian 14forkyfixed7.1.5-1Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.1.5-1Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

This patch fixes the ABBA deadlock between extent_lock and extent mrec_lock triggered by xfstests generic/113, that occurs since the commit 6994acf33bae ("ntfs: use base mft_no when looking up base inode for extent record"). Path A (inode writeback): VFS writeback -> ntfs_write_inode() -> __ntfs_write_inode() -> mutex_lock(&ni->extent_lock) -> mutex_lock(&tni->mrec_lock) Path B (MFT folio writeback): VFS writeback of $MFT dirty folios -> ntfs_mft_writepages() -> ntfs_write_mft_block() -> ntfs_may_write_mft_record() -> holds one extent mrec_lock from a previous iteration -> tries to acquire another base inode extent_lock By removing all extent_lock and extent mrec_lock acquisition from the MFT folio writeback path, the ABBA lock ordering is eliminated: Path A: __ntfs_write_inode(): extent_lock -> mrec_lock Path B (removed): ntfs_write_mft_block(): mrec_lock -> extent_lock Path B is always redundant for extent records because: 1. mark_mft_record_dirty(ext_ni) does NOT dirty the MFT folio. It only sets NInoDirty(ext_ni) and marks the base VFS inode dirty via __mark_inode_dirty(I_DIRTY_DATASYNC), which triggers Path A. Therefore, normal extent modifications never create a situation where the MFT folio is dirty and Path B is not scheduled. 2. The MFT folio only gets dirtied via ntfs_mft_mark_dirty() inside ntfs_mft_record_alloc(). But all identified callers in attrib.c (ntfs_attr_add, ntfs_attr_record_move_away, ntfs_attr_make_non_resident, ntfs_attr_record_resize) follow through with mark_mft_record_dirty(), which triggers Path A to write the complete record. 3. ntfs_evict_big_inode() calls ntfs_commit_inode() before freeing extent inodes, ensuring all dirty extents are flushed via Path A before the base inode leaves the icache.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

fs/ntfs/mft.c

What this is
NTFS FILESYSTEMMAINTAINERS section matched on fs/ntfs/ · linux-fsdevel@vger.kernel.org · Maintained
Kernel module
ntfs

Check it on the machine

grep -w CONFIG_NTFS_FS /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

lsmod | grep -w ntfs

Prints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.

Show whether Debian builds this, per release

Debian does not build this code in 1 release. It does build it in 2 releases, so the answer depends on which release the machine runs. The build rule could not be established for 1 release, so nothing is claimed about those.

  • bookwormn
  • trixie?
  • forky, sidm
n
not enabled on any flavour - this release does not build the code
?
not established - no Makefile entry for the affected file
m
a loadable module on every flavour - check lsmod, can be blacklisted

Where a release above reads "not established", no build rule for the affected file was found in that release's kernel tree. That is a gap in this lookup, not a finding that the code is absent.

Build switch
CONFIG_NTFS_FS

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages

Signals

Published
2026-08-15 (2 months ago)source
CVSS
7.5 high
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.61%, higher than 48.1% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
unimportantsource
Subsystem
fs/ntfs

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
2.6.126.97ffa8f3d3023
7.17.1.5f831ab09d521
7.17.276bc14c7097f

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:NAttack vector, network
The ABBA deadlock is reachable through concurrent VFS writeback on an rw-mounted NTFS volume; ntfs registers ntfs_export_ops, so nfsd/ksmbd remote WRITE/CLOSE/fsync RPCs on an exported NTFS share hit __ntfs_write_inode() and ntfs_mft_writepages() the same as local aio/write syscalls.
AC:LAttack complexity, low
xfstests generic/113 (aio-stress with concurrent O_DIRECT/O_SYNC writes) reliably reproduces the hang; an attacker controls both lock-order participants by issuing parallel file metadata writes and sync/writeback pressure without races or attacker-independent memory layout.
PR:NPrivileges required, none
Exploitation needs only write access to an rw-mounted or NFS/SMB-exported NTFS volume to drive ntfs_mft_record_alloc and concurrent writeback; no CAP_SYS_ADMIN, root, or init-namespace privileges on the server are required to deadlock the writeback paths.
UI:NUser interaction, none
Once an NTFS volume is rw-mounted (dual-boot partition, removable media, loop mount, or network export), the attacker issues the concurrent writes itself; no additional victim clicks, opens, or cooperative actions are required beyond that standing configuration.
S:UScope, unchanged
The circular mutex wait between extent_lock and extent mrec_lock only hangs kernel writeback and I/O worker threads within the host kernel security authority; it does not cross VM, container, IOMMU, or other security-boundary scopes.
C:NConfidentiality impact, none
This is a deterministic lock-order inversion with no out-of-bounds access, use-after-free, or information disclosure; blocked threads wait on mutexes without reading attacker-controlled freed memory or leaking kernel pointers.
I:NIntegrity impact, none
The defect prevents completion of metadata writeback by deadlocking mutex acquisition; it does not perform attacker-controlled memory writes, corrupt on-disk NTFS structures, or provide a metadata modification primitive beyond denying forward progress.
A:HAvailability impact, high
The ABBA deadlock between inode writeback (extent_lock then extent mrec_lock) and $MFT folio writeback (held mrec_lock then extent_lock) hangs kworker writeback and sync/fsync callers indefinitely, causing system-wide I/O denial of service.