CVE-2026-90199

CVE-2026-90199

High · published September 17, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
6.5
In the wild
Unconfirmed
What it is

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

fs/ntfs3: reject out-of-range evcn in mi_enum_attr()

In mi_enum_attr(), the start/end VCN validation for non-resident

attributes is:

if (svcn > evcn + 1) goto out;

When evcn is U64_MAX the "evcn + 1" expression wraps to 0 and any svcn

passes the check. For evcn values close to U64_MAX (but not equal to it)

the right-hand side is still a meaningless near-wrap upper bound, so a

malformed on-disk attribute with svcn == 0 and evcn near U64_MAX can pass

mi_enum_attr() unrejected.

VCN (virtual cluster number) is a cluster index, so any valid evcn is

bounded by the volume's total cluster count, which ntfs3 holds in

sbi->used.bitmap.nbits (set up in ntfs_init_from_boot() before any caller

of mi_enum_attr() runs). Reject evcn values that fall outside this range.

However, an empty non-resident attribute (no allocated clusters) is

legitimately encoded with svcn == 0 and evcn == -1 (U64_MAX), e.g. via

attr->nres.evcn = cpu_to_le64((u64)vcn - 1) with vcn == 0. That sentinel

must keep passing, so exclude evcn == U64_MAX from the range check. The

existing "svcn > evcn + 1" test still tolerates the sentinel ("0 > 0" is

false) and continues to require svcn == 0 for it, while the range check

rejects every other out-of-range evcn and thereby also defuses the

"evcn + 1" wraparound.

svcn does not need its own bound: once evcn < nbits, "svcn > evcn + 1"

implies svcn <= nbits.

[[email protected]: fixed evcn check]

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00174 · 6.5th percentile
Published
2026-09-17T21:17Z
References (5)
EPSS history
Timeline
  • 19 SEP 03:55Z
    EPSS moved — → 0%
    epss
  • 17 SEP 16:07Z
    fs/ntfs3: reject out-of-range evcn in mi_enum_attr()
    cvelistv5