CVE-2026-89616
massLinux kernel NTFS3 driver leaks uninitialized kernel memory on LZNT decompression
The Linux kernel's NTFS3 filesystem driver fails to zero the tail of a decompressed frame in ni_read_frame(): when decompress_lznt() exhausts the compressed stream early, it returns fewer bytes than the frame size, and the driver marks all pages uptodate without clearing the gap. A crafted NTFS file whose LZNT stream decompresses to only a few bytes causes a plain read(2) to disclose the unwritten tail — recently freed kernel page memory — to unprivileged userspace. Leaked content can reveal kernel pointers and defeat KASLR, providing reconnaissance for follow-on kernel exploitation. Any Linux system that mounts an NTFS filesystem with the in-kernel ntfs3 driver and reads such a file is affected; the issue is rated CVSS 3.1 7.5 (high) with a network attack vector, since a malicious NTFS image can be delivered remotely (downloaded image, network share) and mounted by the victim. The flaw is fixed upstream by zeroing the [unc_size, frame_size) tail after a successful LZNT decompression, and no public PoC or in-the-wild exploitation is known.
What to do: Install a kernel that backports the fs/ntfs3 fix (which zeroes the [unc_size, frame_size) tail immediately after a successful LZNT decompression) as soon as your distribution ships it. Until patched, avoid mounting untrusted NTFS disk images or removable media with the in-kernel ntfs3 driver — disable CONFIG_NTFS3, prefer the userspace ntfs-3g driver, or block automounting of NTFS media. Note that only systems with the ntfs3 driver compiled in or loaded as a module and actually reading NTFS volumes are exposed, so servers without NTFS mounts carry minimal practical risk.
| Linux Kernel (fs/ntfs3 NTFS3 driver) | All kernel versions shipping the fs/ntfs3 NTFS3 driver prior to the fixing commit; the advisory does not enumerate specific version ranges |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: fix info-leak on partial LZNT decompress in ni_read_frame() ni_read_frame() decompresses an LZNT $DATA frame into the vmapped target pages and then trusts decompress_lznt()'s return value: unc_size = decompress_lznt(frame_ondisk, ondisk_size, frame_mem, frame_size); if ((ssize_t)unc_size frame_size) err = -EINVAL; decompress_lznt() stops as soon as the compressed stream is exhausted (e.g. a zero chunk header) and returns the number of bytes it actually wrote, which may be far less than frame_size. The bytes between unc_size and frame_size are never written. The only memset() that follows zeroes the region beyond i_valid; when the frame lies entirely within the file's valid size that memset() does not run, so the gap retains whatever was in the just-vmapped pages. All pages are then marked uptodate and returned to userspace, disclosing uninitialized (recently-freed) kernel page memory. A crafted compressed file whose stream decompresses to only a few bytes leaks the remainder of every frame on a plain read(2), which is enough to recover kernel pointers and defeat KASLR. Zero the [unc_size, frame_size) tail immediately after a successful LZNT decompress so the remainder reads back as zero.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
In the news0 stories
No ingested article mentions this CVE yet.