CVE-2026-98135 in Linuxinfo

Summary

by MITRE • 09/25/2026

In the Linux kernel, the following vulnerability has been resolved:

ntfs: reject invalid sectors_per_cluster in the boot sector

is_boot_sector_ntfs() checks the boot sector's sectors_per_cluster field with a range test that rejects 0x81..0xf3 but accepts 0 and other non-power-of-two counts. A zero value reaches parse_ntfs_boot_sector():

sectors_per_cluster_bits = ffs(sectors_per_cluster) - 1; ... vol->cluster_size = vol->sector_size << sectors_per_cluster_bits;

ffs(0) is 0, so sectors_per_cluster_bits becomes (unsigned)-1 and the shift is undefined:

UBSAN: shift-out-of-bounds in fs/ntfs/super.c:673:39 shift exponent 4294967295 is too large for 32-bit type 'int'

This change rejects any non-power-of-two value, since it feeds the aforementioned shift via ffs() - 1, which only yields the correct shift for a power of two.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 09/25/2026

The Linux kernel's NTFS filesystem driver contains a critical input validation flaw within its boot sector parsing logic that can lead to undefined behavior and potential system instability. The vulnerability originates in the is_boot_sector_ntfs function, which is responsible for verifying the integrity of the file system metadata during mount operations. Specifically, this function performs a range check on the sectors_per_cluster field found in the NTFS boot sector. While it correctly rejects values between 0x81 and 0xf3, it erroneously accepts zero as well as other non-power-of-two integers. This oversight allows malformed or maliciously crafted disk images to bypass initial validation checks and proceed deeper into the parsing routine without triggering an immediate error state.

The core technical flaw manifests when a value of zero is passed from the boot sector verification stage to the parse_ntfs_boot_sector function. Within this function, the code calculates sectors_per_cluster_bits by applying the ffs operation on sectors_per_cluster and subtracting one. The ffs function returns the position of the least significant bit set to one, returning zero if its input argument is zero. Consequently, when sectors_per_cluster is zero, sectors_per_cluster_bits evaluates to negative one due to unsigned integer underflow in subsequent arithmetic operations involving type casting or bitwise logic that expects a valid power-of-two exponent. This calculated value is then used as the shift amount for left-shifting vol->sector_size by sectors_per_cluster_bits to determine vol->cluster_size. In C programming, shifting an integer by a negative number or by more than the width of the type constitutes undefined behavior according to the language standard and triggers specific runtime checks such as those provided by UBSAN.

The operational impact of this vulnerability is significant for system stability and security integrity. When the kernel executes the shift operation with an exponent of 4294967295, which corresponds to negative one interpreted as a large unsigned integer on thirty-two-bit systems or simply an invalid shift count, it triggers a UBSAN shift-out-of-bounds error. Depending on compiler optimizations and runtime configurations, this undefined behavior can result in corrupted memory calculations for cluster sizes, leading to incorrect pointer arithmetic during subsequent file system operations. In worst-case scenarios involving crafted disk images from untrusted sources, such as malicious USB drives or network-mounted volumes, an attacker could potentially exploit the resulting state corruption to cause a kernel panic, denial of service by crashing the host system, or in rare circumstances with further exploitation chains, arbitrary code execution through memory corruption primitives derived from the miscalculated cluster boundaries.

To mitigate this vulnerability, it is imperative that input validation be strengthened at the earliest possible stage of processing untrusted file system metadata. The fix involves modifying the range check within is_boot_sector_ntfs to explicitly reject any value for sectors_per_cluster that is not a power of two. Since the subsequent calculation relies on ffs returning a valid bit position corresponding to powers of two, accepting non-power-of-two values like zero or three will inevitably lead to logical errors in size calculations. By enforcing strict adherence to the NTFS specification which mandates that sectors per cluster must be one, two, four, eight, sixteen, thirty-two, sixty-four, or one hundred twenty-eight, the kernel ensures that all downstream arithmetic operations remain within defined behavior limits. This change aligns with CWE-20 Improper Input Validation and mitigates risks associated with CWE-190 Integer Overflow or Wraparound by preventing invalid inputs from propagating into critical calculation routines. Furthermore, this remediation supports ATT&CK technique T1564 Hide Execution via VM or Sandbox evasion resistance by ensuring that malformed artifacts intended to trigger kernel bugs are rejected before they can affect system stability.

Responsible

Linux

Reservation

09/25/2026

Disclosure

09/25/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Interested in the pricing of exploits?

See the underground prices here!