CVE-2026-89593
High · 7.1CVSS
7.1
EPSS
0.1%
Published
Sep 11, 2026
CISA due date
—
Cloudanix analysis
A bug in how Linux tracks extra-large memory pages can let someone already on the computer scramble that tracking, which may crash the machine or let them use more of that special memory than they should.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Other
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
A local Linux kernel logic error in hugetlb unmapping adjusts huge-page reservations without first checking folio mapcount. When a huge-page folio is still mapped in a child after the parent unmaps the range, the reserved-page counter can underflow and wrap or go inconsistent, corrupting kernel huge-page accounting. That corruption can break intended reservation and subpool limits (integrity) and produce allocation failures, warnings, or host instability (availability). Confidentiality is not impacted.
Why it matters to the business
Any Linux host that lets unprivileged users use huge pages (databases, HPC, VMs, developer workstations, multi-tenant nodes) can suffer host-level memory accounting errors, application or kernel disruption, or further abuse of the huge-page pool by a logged-in user. Blast radius is the whole machine, not a single process. This is not listed in CISA KEV, is not associated with ransomware campaigns, has no reported exploit maturity, and EPSS is low and flat (~0.00125 over 30 days). It was published about 37 days ago. Treat it as a real local kernel integrity/availability issue on shared systems, not as an internet-wide emergency. Downstream product lists and exact fixed package versions were not supplied with this record, so exposure depends on whether the running kernel still contains the buggy unmap path.
How an attack unfolds
An attacker who already has a local unprivileged account on an affected kernel allocates huge pages (hugetlbfs or mmap with MAP_HUGETLB) and forks so the same folio remains mapped in parent and child. The parent unmaps the range first. Because __unmap_hugepage_range adjusted reservations without requiring mapcount == 0, the global or subpool reserved count underflows while the child still holds the mapping. The attacker can then consume huge pages beyond configured reservations or induce kernel accounting failures and denial of service. When the child later unmaps, the counter is adjusted again, which can further scramble accounting rather than cleanly repairing it. No named threat actors or in-the-wild campaigns are reported for this issue.
How to fix it
Install and boot a Linux kernel from your distribution that includes the fix titled 'hugetlb: only adjust reservation during unmapping if mapcount is 0' (reservation adjustment in __unmap_hugepage_range only when mapcount is 0). Exact per-package fixed versions were not provided with this record—use the vendor advisory for CVE-2026-89593 or the corresponding stable-kernel commit. Reboot onto the patched kernel. Until then, limit who can allocate huge pages: restrictive hugetlbfs mounts, cgroup hugetlb limits, tight memlock/rlimit and CAP_IPC_LOCK, and avoid granting untrusted users access to MAP_HUGETLB. Systems that do not need huge pages can leave nr_hugepages at 0 and keep hugetlbfs unmounted.
How to confirm the fix worked
Confirm the running kernel package is at or beyond the patched release in the distro advisory and that uname -r matches the patched build after reboot. Check package changelog or kernel git history for the hugetlb unmap mapcount reservation fix. Identify remaining huge-page users via /proc/meminfo (HugePages_*), /sys/kernel/mm/hugepages/, and 'ht' VmFlags in /proc/*/smaps. There is no reliable remote unauthenticated scanner for this local accounting bug; validation is kernel-version and configuration based.
Typical attack path
- Obtain local unprivileged code execution on a Linux host that allows huge-page allocation
- Create a hugetlb-backed mapping so a folio is reserved and mapped
- Fork so the child inherits the mapping (mapcount > 1)
- Unmap the range in the parent while the child still holds the folio
- Abuse the underflowed reservation state to exceed huge-page limits or destabilize the kernel
- Optionally unmap in the child, further distorting reservation accounting
How to detect it
There is no network indicator. Hunt locally for hugetlb activity around fork plus unmap. Review dmesg and journalctl -k for hugetlb warnings, BUGs, or oopses that reference __unmap_hugepage_range or reservation accounting. Compare HugePages_Total/Free/Rsvd/Surp in /proc/meminfo and /sys/kernel/mm/hugepages/ against vm.nr_hugepages; an underflowed counter that wrapped may show as an implausibly large reserved count. Audit logs for mmap/munmap on hugetlbfs and clone/fork by untrusted users can show the setup pattern but are not proof of exploitation. Because the child unmap can restore the counter, a normal-looking reserved count does not prove the bug was never triggered. No APT or ransomware campaigns are associated.
What your security team should do
- Patch and reboot to a kernel that checks mapcount before hugetlb reservation adjustment; prioritize multi-tenant, CI, and developer hosts where unprivileged users can use huge pages
- Inventory where huge pages are actually in use versus merely compiled in, using /proc/meminfo and hugetlbfs mounts
- Until patched, restrict unprivileged huge-page allocation with mount permissions, cgroups, and memlock limits
- Watch kernel logs and HugePages_Rsvd/Surp for unexplained swings after fork/unmap of hugetlb mappings
- Do not treat this as KEV/ransomware urgency (EPSS ~0.00125, no known exploitation), but do not ignore High local I/A kernel bugs on shared infrastructure
- Track distribution kernel advisories because this record does not list affected products or exact fixed versions
The record
In the Linux kernel, the following vulnerability has been resolved: hugetlb: only adjust reservation during unmapping if mapcount is 0 Since df7a6d1f6405, __unmap_hugepage_range can adjust reservations. In the case of folio mapped in both a parent and a child, if the parent unmaps the range first, the reservation adjustment will result in an underflow of the reserved count. Once the child unmaps the range, the count is restored. Change __unmap_hugepage_range() to check the mapcount before adjusting the reservation.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|