Vulnerability · Published Sep 16, 2026 · Assigned by Linux

CVE-2026-89987mm/huge_memory: transfer the pmd dirty bit to the folio on zap

Unrated

In plain English

A security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.2% (higher than 12% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.

Severity (CVSS )–Not rated
Exploit odds (30 days)0.2%top 87.8% of all CVEs
Exploited in the wildNo reportsnot in CISA KEV
Attack toolingNoneno public tooling known

Official description

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.

Affected packages & fixed versions

EcosystemPackageFixed inAdvisory
Debian:12linuxno fix listedDEBIAN-CVE-2026-89987
Debian:13linux6.12.115-2DEBIAN-CVE-2026-89987
Debian:14linux7.2.6-1DEBIAN-CVE-2026-89987
Ubuntu:22.04:LTSlinuxno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinuxno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux7.0.0-42.42UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-allwinner-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-awsno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-awsno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-aws7.0.0-1016.17UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-aws-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-aws-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-aws-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-aws-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-aws-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-aws-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-aws-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azureno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azureno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-azureno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-fdeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-fdeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-azure-fdeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-fde-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-fde-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-fde-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-fde-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-azure-fde-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-fde-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-nvidiano fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-azure-nvidia-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gcpno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gcpno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-gcp7.0.0-1016.18UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gcp-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gcp-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gcp-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gcp-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gcp-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gcp-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gcp-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gcp-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gkeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gkeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-gkeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-gkeopno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-gkeopno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-hwe-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-hwe-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-hwe-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-hwe-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-hwe-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-hwe-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-hwe-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-hwe-7.07.0.0-42.42~24.04.1UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-ibmno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-ibmno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-ibm7.0.0-1017.17UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-ibm-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-intel-iot-realtimeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-intel-iotgno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-kvmno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-lowlatencyno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-lowlatencyno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-lowlatency-hwe-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-lowlatency-hwe-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidiano fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidiano fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-nvidiano fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidia-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidia-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidia-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidia-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidia-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidia-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-nvidia-bosno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidia-lowlatencyno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidia-tegrano fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-nvidia-tegrano fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-nvidia-tegra-igxno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oem-5.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oem-6.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oem-6.1no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oem-6.11no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oem-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oem-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oem-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oem-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-oem-7.07.0.0-1017.17UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oracleno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oracleno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-oracle7.0.0-1015.16UBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oracle-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oracle-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oracle-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-oracle-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-oracle-7.0no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-raspino fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-raspino fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-raspino fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-raspi-realtimeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2026-89987
Ubuntu:26.04:LTSlinux-riscv7.0.0-42.42.1UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-riscv-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-riscv-6.14no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-riscv-6.17no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-riscv-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-riscv-6.8no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-riscv-7.07.0.0-42.42.1~24.04.1UBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-starfive-5.19no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-starfive-6.2no fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-starfive-6.5no fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-vmwareno fix listedUBUNTU-CVE-2026-89987
Ubuntu:24.04:LTSlinux-xilinxno fix listedUBUNTU-CVE-2026-89987
Ubuntu:22.04:LTSlinux-xilinx-zynqmpno fix listedUBUNTU-CVE-2026-89987

Affected products (as reported)

VendorProductVersions
Linux Linux b5072380eb619786990cd9eab3ade05d09ccd89e – before 79d8c89baa10612c1675972a632c65cdbe0936f6b5072380eb619786990cd9eab3ade05d09ccd89e – before 13f4910d81b62a214cdb28b47237198fa96078a2b5072380eb619786990cd9eab3ade05d09ccd89e – before 7a4c3f7b47ba34b021a7747081f330bfb76a4271b5072380eb619786990cd9eab3ade05d09ccd89e – before 6e904f9e8cb0e39f60e1cdbea679f89346a563c2b5072380eb619786990cd9eab3ade05d09ccd89e – before fd720d3906877b3d2118cd480027e4bc6648f0c5b5072380eb619786990cd9eab3ade05d09ccd89e – before effe3cc6d4fdd407457eb30f7b0ef094393f0d64b5072380eb619786990cd9eab3ade05d09ccd89e – before 9435cddf1378d149d826bd7bd1448a44bf96868db5072380eb619786990cd9eab3ade05d09ccd89e – before fe6cf984939d8e12cb33a99673c8d026c5135e68
Linux Linux 4.8

References