Description
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 < 0) err = unc_size;
else if (!unc_size || 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.
Published: 2026-09-11
Score: 5.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Information disclosure via kernel memory leakage
Action: Update kernel
AI Analysis

Impact

The vulnerability resides in the ntfs3 file system driver. During the decompression of an LZNT $DATA frame, the function ni_read_frame() relies on the return value of decompress_lznt(). decompress_lznt() may finish early when the compressed stream ends prematurely, returning a size smaller than the frame size. The remaining bytes of the frame are never overwritten, and the subsequent memset() is skipped when the frame is wholly within the file's valid size, leaving the gap filled with whatever was in the just‑vmapped pages. All pages are then marked uptodate and returned to user space, disclosing uninitialised kernel memory. A specially crafted NTFS file that decompresses to only a few bytes can leak the rest of every frame via a standard read system call, revealing kernel pointers and disabling KASLR. The effect is a direct kernel memory disclosure. An attacker who can cause the system to read such a malformed NTFS file can recover addresses that can in turn be used to bypass address space layout randomisation and facilitate privilege‑escalation attacks. The flaw remains a pure information‑leak; it does not provide arbitrary kernel code execution on its own, but the leaked data is a valuable asset for subsequent attacks. The kernel contains no mitigation flag for this bug; the only remedy is to apply the patch that zeroes the tail of decompressed frames immediately after decompression, ensuring that the unused region never contains sensitive data.

Affected Systems

All Linux kernel releases that ship the fs/ntfs3 specific version details are not provided in the advisory, any distribution running a kernel older than the commit that introduces the fix is potentially vulnerable. This includes the broadly deployed mainline kernels and many distribution‑specific backports that have not yet incorporated the patch.

Risk and Exploitability

The CVSS score is 5.5, indicating a medium severity disclosure. The EPSS score is < 1%, indicating a very low exploitation probability. The vulnerability is not listed in the CISA KEV catalog, but the exposure of kernel memory can be effectively leveraged to defeat KASLR and aid privilege‑escalation attacks. The exploit requires the ability to read a malicious NTFS file, which is commonly possible on a system with a mounted NTFS volume or with an application that pulls in such data. Consequently the risk is moderate to high for environments that must handle NTFS data, especially if users have local authority to write or read arbitrary files on the volume. Given the attack can be performed via a normal read(2) system call on a crafted NTFS image, the success probability‑level mitigations should be applied promptly, and until such updates are available, the exposure remains an actionable threat.

Generated by OpenCVE AI on September 13, 2026 at 01:08 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest kernel update that includes the LZNT decompression fix, or apply the backported patch from the upstream kernel source.
  • Remount any NTFS partitions with the read‑only flag until a patched kernel is in place to prevent the kernel from exposing uninitialised data to user‑space.
  • Unload or disable the ntfs3 kernel module if NTFS support is not required, thereby eliminating the attack surface.

Generated by OpenCVE AI on September 13, 2026 at 01:08 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 12 Sep 2026 15:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-200
CWE-254

Sat, 12 Sep 2026 12:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-908
References
Metrics threat_severity

None

cvssV3_1

{'score': 5.5, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N'}

threat_severity

Moderate


Sat, 12 Sep 2026 08:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-200
CWE-254

Fri, 11 Sep 2026 23:45:00 +0000

Type Values Removed Values Added
Description 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 < 0) err = unc_size; else if (!unc_size || 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.
Title fs/ntfs3: fix info-leak on partial LZNT decompress in ni_read_frame()
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-11T19:45:16.064Z

Reserved: 2026-09-11T19:38:34.735Z

Link: CVE-2026-89616

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-11T20:19:46.783

Modified: 2026-09-11T20:19:46.783

Link: CVE-2026-89616

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-11T19:45:16Z

Links: CVE-2026-89616 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-13T01:15:14Z

Weaknesses
  • CWE-908

    Use of Uninitialized Resource