CVE-2026-90200
UnknownSummary
In the Linux kernel, the ntfs_init_from_boot() function in the fs/ntfs3 driver has an integer overflow when validating MFT cluster numbers from the boot sector. The multiplication mlcn * sct_per_clst is performed in u64 and can wrap for large mlcn values, bypassing the volume size check and accepting a malformed record. In practice this causes NTFS mounts to fail in odd places.
Risk Assessment
The vulnerability can be exploited by a local user to cause a denial of service (failed mount) by supplying a crafted NTFS image or media. It does not currently lead to code execution or privilege escalation because reads are caught at a lower layer, but the flawed validation poses a future risk.
Recommendation
Update the Linux kernel to a version containing the fix that uses check_mul_overflow() to detect overflow when computing MFT sector positions. Until patched, avoid mounting untrusted NTFS images and media.
Other vulnerabilities in Linux kernel (fs/ntfs3)
See all- CVE-2026-89779Critical
In the Linux kernel, fs/ntfs3's ntfs_read_ea() does not verify that the EA record's ef->size is large enough to hold the record's name and value. A crafted NTFS image can set a small ef->size with a large elength, causing an out-of-bounds read past the allocated buffer and leaking kernel heap memory to userspace via getxattr().
- CVE-2026-97438High
A vulnerability was found in the Linux kernel's fs/ntfs3 module due to missing validation of index entry key bounds. A malformed NTFS directory index entry can advertise a key_size larger than the bytes actually present in its payload, causing an out-of-bounds read in cmp_fnames().
- CVE-2026-89782High
A vulnerability was found in the Linux kernel's fs/ntfs3 module due to missing validation of restart table growth during $LogFile replay. When mounting a crafted NTFS image, an entry count exceeding U16_MAX is truncated, causing allocation of a table smaller than required and an out-of-bounds access.
- CVE-2026-89617High
In the Linux kernel, the fs/ntfs3 driver does not validate the dirty page table during log replay. A crafted DIR_PAGE_ENTRY with an invalid lcns_follow field lets the v0->v1 conversion and later replay passes run off the entry.
- CVE-2026-89616High
In the Linux kernel, ni_read_frame() in fs/ntfs3 trusts decompress_lznt()'s return value, which may be smaller than the frame size. Unwritten bytes remain in the vmapped pages and are returned to userspace, disclosing uninitialized kernel memory.
- CVE-2026-89615High
In the Linux kernel, the copy_lcns and redo shorten loops in fs/ntfs3 index page_lcns[] based on the log record's lcns_follow, which is not checked against the target entry. A crafted record can overflow page_lcns[] of an otherwise valid entry.
- CVE-2026-45864Medium
In the Linux kernel's NTFS3 filesystem, an infinite loop vulnerability was found when processing the range [valid : pos). If the valid value cannot be read correctly and remains the same, a process hang may occur, as reported by syzbot. A check was added to detect unchanged valid values and return -EINVAL.
- CVE-2025-71311High
In the Linux kernel, the NTFS3 filesystem has a vulnerability involving the use of uninitialized folios. Newly allocated folios are not marked as uptodate, and the ni_read_frame() function is skipped when the caller expects the frame to be completely overwritten, leaving part of the memory uninitialized.
Original NVD description (English source)
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: fix integer overflow in MFT cluster validation In ntfs_init_from_boot(), the boot sector's MFT cluster numbers are validated against the volume size with: if (mlcn * sct_per_clst >= sectors || mlcn2 * sct_per_clst >= sectors) goto out; mlcn and mlcn2 are u64 fields read directly from the boot sector. sct_per_clst is bounded above by 4096 (true_sectors_per_clst() plus the is_power_of_2() check below it), but the multiplication is done in u64 and wraps when mlcn (or mlcn2) is large enough -- e.g. mlcn near 2^62 with sct_per_clst == 4 wraps to 0, which compares below any non-zero 'sectors', so the check is bypassed and the malformed record is accepted. The accepted mlcn is then used unchanged in sbi->mft.lbo = mlcn << cluster_bits; In practice the resulting reads fail at the block layer (sb_bread() returns NULL via grow_buffers()'s check_mul_overflow() guard), so today this manifests as mount failing in odd places rather than as something more dangerous, but the validation step is still wrong and there is no reason for callers to rely on the block layer to catch a value that should never have been accepted in the first place. Use check_mul_overflow() to compute the two sector positions and fail the mount if either multiplication wraps; this preserves the existing semantics (mlcn * sct_per_clst >= sectors) instead of switching to division (mlcn >= sectors / sct_per_clst), which would tighten the check at edge cases where 'sectors' is not a multiple of sct_per_clst. The check_*_overflow() style is the one ntfs3 already uses for similar on-disk arithmetic in fs/ntfs3/run.c.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

