CVE-2026-89987

UNRATEDCVSS · not yet scoredTrending — 4 sources updated this week
—
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • No CVSS published and no exploitation signals yet
CISA-KEV: Not listedEPSS PROB: 0.2%CVSS v2: —Exploit: None knownExposed services: Not assessed

No fix is confirmed yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for the fix.

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

mm/huge_memory: transfer the pmd dirty bit to the folio on zap

zap_huge_pmd_folio() propagates the pmd young bit to the folio for the file case, but not the dirty bit. The pte path does propagate it, in zap_present_folio_ptes() and so does the pmd split path, in __split_huge_pmd_locked().

For most file mappings the omission is harmless, because writing to a shared file mapping goes through page_mkwrite(), which dirties the folio. tmpfs is different: it has no page_mkwrite(), and vma_wants_writenotify() is false for it, so a *read* fault on a MAP_SHARED tmpfs mapping installs a writable pmd via do_read_fault(). do_read_fault() does not call fault_dirty_shared_page(), so subsequent stores through that mapping set only the hardware dirty bit in the pmd and never call folio_mark_dirty(). A shmem folio allocated by a fault is marked uptodate but not dirty (see the clear: block in shmem_get_folio_gfp()), so PG_dirty is never set at all.

Unmapping such a folio - munmap(), or exit_mmap() when the process dies - then loses the only record that it was written, because zap_huge_pmd() drops the pmd without transferring the dirty bit. Reclaim afterwards sees a clean shmem folio: the whole swap-out block in shrink_folio_list() is inside "if (folio_test_dirty(folio))", so pageout() is skipped and the folio falls into __remove_mapping(). There, folio_is_file_lru() is false for a swapbacked folio, so no shadow entry is created and __filemap_remove_folio(folio, NULL) simply empties the i_pages slot. The data is freed without ever being written to swap, and the next fault on that index returns a freshly zeroed folio.

This is silent data loss for any process that keeps state in a MAP_SHARED tmpfs segment across an unmap - for example a cache handed from one process generation to the next through /dev/shm. It requires the folio to be PMD-mapped, so it only shows up once shmem THP is enabled (which is what we did in Meta fleet and started noticing crashes); with THP off the pte path transfers the dirty bit correctly. It also only becomes visible when swap is enabled, because with no swap device shmem folios (which are on the anon LRU) are not scanned by reclaim at all, so the clean folio is never dropped.

Reproduced on x86_64 with a tmpfs mounted huge=within_size: read-fault a 2MB-backed region, write a known pattern through the resulting mapping, munmap, force reclaim of the cgroup, then re-map and read back. Without this patch the region reads back as zeros and vmstat shows zswpout 0 - the data was discarded rather than swapped. With this patch the region reads back correctly and the pages are swapped out as expected. With huge=never, or when the first touch is a write, the test passes either way.

CVSS v3
—
EchelonGraph score
Not yet assessedNo source has published severity data for this CVE yet — no CVSS score from NVD or a CNA, no GitHub advisory, and it is not in CISA KEV. This is not a rating of zero; we cannot assess it yet.
EG Score
—
EG Risk
—
EPSS PROB
0.2%
EPSS %ILE
9th
KEV
Not listed

Published

September 16, 2026

Last Modified

September 16, 2026

Vendor Advisories for CVE-2026-89987(2)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Affected Packages

(3 across 3 ecosystems)
Debian:12(1)
PackageVulnerable rangeFix by version rangeDependents
linux6.1.106-1 ... 7.2~rc7-1~exp1 (358 versions)
  • every version on: no fix on record
—
Debian:13(1)
PackageVulnerable rangeFix by version rangeDependents
linux6.12.100-1 ... 7.2~rc7-1~exp1 (181 versions)
  • every version on: no fix on record
—
Debian:14(1)
PackageVulnerable rangeFix by version rangeDependents
linux6.12.100-1 ... 7.2~rc7-1~exp1 (178 versions)
  • every version up to 7.2.6-1: fixed in 7.2.6-1
—

Data Freshness Timeline

(refreshed 12× in last 7d / 31× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-10-04 23:22 UTCEPSS rescore
  2. 2026-10-04 21:53 UTCVendor advisory
  3. 2026-10-04 21:53 UTCGHSA enrichment
  4. 2026-10-01 20:09 UTCEG score recompute
  5. 2026-10-01 20:09 UTCVendor advisory
  6. 2026-10-01 20:09 UTCGHSA enrichment
  7. 2026-10-01 19:51 UTCEPSS rescore
  8. 2026-09-30 15:04 UTCEPSS rescore
  9. 2026-09-28 18:24 UTCVendor advisory
  10. 2026-09-28 18:24 UTCGHSA enrichment
  11. 2026-09-28 13:52 UTCEPSS rescore
  12. 2026-09-28 13:52 UTCEPSS rescore
  13. 2026-09-27 13:49 UTCEPSS rescore
  14. 2026-09-26 15:59 UTCEPSS rescore
  15. 2026-09-25 16:33 UTCVendor advisory
  16. 2026-09-25 16:33 UTCGHSA enrichment
  17. 2026-09-24 14:04 UTCEPSS rescore
  18. 2026-09-23 17:54 UTCEPSS rescore
  19. 2026-09-22 16:01 UTCEPSS rescore
  20. 2026-09-22 14:49 UTCVendor advisory
  21. 2026-09-22 14:49 UTCGHSA enrichment
  22. 2026-09-21 21:09 UTCEPSS rescore
  23. 2026-09-20 20:16 UTCEPSS rescore
  24. 2026-09-19 13:05 UTCEG score recompute
  25. 2026-09-19 13:05 UTCVendor advisory
Show 6 more
  1. 2026-09-19 13:05 UTCGHSA enrichment
  2. 2026-09-18 19:28 UTCEPSS rescore
  3. 2026-09-17 19:32 UTCEPSS rescore
  4. 2026-09-16 11:21 UTCNVD update
  5. 2026-09-16 10:38 UTCEG score recompute
  6. 2026-09-16 10:36 UTCMITRE cvelistV5first tracked

Frequently asked(4)

What is CVE-2026-89987?
CVE-2026-89987 is a publicly disclosed vulnerability published on September 16, 2026. In the Linux kernel, the following vulnerability has been resolved: mm/huge_memory: transfer the pmd dirty bit to the folio on zap zaphugepmd_folio() propagates the pmd young bit to the folio for the file case, but not the dirty bit. The pte path does propagate it, in zappresentfolio_ptes() and so…
When was CVE-2026-89987 disclosed?
CVE-2026-89987 was first published on September 16, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-89987 actively exploited?
CVE-2026-89987 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 0.2% probability of exploitation in the next 30 days (9th percentile of EPSS-scored CVEs).
How do I remediate CVE-2026-89987?
No fix for CVE-2026-89987 is confirmed yet. Until one is published, restrict network exposure of the affected system or apply the vendor's mitigation — for example, keep it off the internet or limit it to trusted networks — and watch the vendor's advisory for the fix. The vendor advisories EchelonGraph has for CVE-2026-89987 are linked in the Vendor Advisories panel on this page.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-89987

Explore →

Is Your Infrastructure Affected by CVE-2026-89987?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.