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

CVE-2026-89987 is fixed in 36 products on 1 platform, first by DEBIAN-CVE-2026-89987, released September 23, 2026. It is not reported as exploited. Patch Radar priority: Routine.

- Web page: https://patchblox.com/security/cve/CVE-2026-89987
- Priority: Routine
- CVSS: 5.5 (Moderate)
- EPSS: 0.0022
- CISA KEV: not listed
- Exploited (vendor report): no
- Publicly disclosed: no
- Published: Sep 16, 2026
- Vendor advisory: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-89987

## 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.

## Where it's fixed

| Platform | Product | Fixed in | Fix | Released |
|---|---|---|---|---|
| Linux | bpftool6.18 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | bpftool6.18-debuginfo amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | dtb-aarch64 opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-64kb opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-64kb sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-64kb sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-azure opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-azure sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-azure sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-default opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-default sles 15.6 | 6.4.0-150600.23.143.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-default sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-default sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-default-base opensuse-leap 16.0 | 6.12.0-160000.40.1.160000.2.29 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-default-base sles 15.6 | 6.4.0-150600.23.143.1.150600.12.66.3 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-default-base sles 15.7 | 6.4.0-150700.53.87.3.150700.17.49.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-default-base sles 16.0 | 6.12.0-160000.40.1.160000.2.29 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-docs opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-docs sles 15.6 | 6.4.0-150600.23.143.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-docs sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-docs sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-kvmsmall opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-kvmsmall sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-livepatch-6.18.54-121.166 amzn 2023 | 1:1.0-0.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel-livepatch-SLE15-SP6_Update_33 sles 15.6 | 1-150600.13.5.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-livepatch-SLE15-SP7-RT_Update_22 sles 15.7 | 1-150700.1.3.1 | [SUSE-SU-2026:4940-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4940-1.md) | Nov 7, 2026 |
| Linux | kernel-livepatch-SLE15-SP7_Update_23 sles 15.7 | 1-150700.15.3.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-build opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-build sles 15.6 | 6.4.0-150600.23.143.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-build sles 15.7 | 6.4.0-150700.53.87.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-qa opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-qa sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-rt opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-source opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-source sles 15.6 | 6.4.0-150600.23.143.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-source sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-source sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-syms opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-syms sles 15.6 | 6.4.0-150600.23.143.1 | [SUSE-SU-2026:4934-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4934-1.md) | Nov 7, 2026 |
| Linux | kernel-syms sles 15.7 | 6.4.0-150700.53.87.1 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-syms sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel-zfcpdump opensuse-leap 16.0 | 6.12.0-160000.40.1 | [OPENSUSE-SU-2026:22167-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-22167-1.md) | Nov 7, 2026 |
| Linux | kernel-zfcpdump sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-zfcpdump sles 16.0 | 6.12.0-160000.40.1 | [SUSE-SU-2026:24446-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-24446-1.md) | Nov 7, 2026 |
| Linux | kernel6.18 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-debuginfo amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-debuginfo-common-aarch64 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-debuginfo-common-x86_64 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-devel amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-headers amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-modules-extra amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-modules-extra-common amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-tools amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-tools-debuginfo amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | kernel6.18-tools-devel amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | linux Debian 13.5 (trixie) | 6.12.115-2 | [DEBIAN-CVE-2026-89987](https://patchblox.com/security/data/fix/linux/debian-cve-2026-89987.md) | Sep 23, 2026 |
| Linux | linux Debian 14 | 7.2.6-1 | [DEBIAN-CVE-2026-89987](https://patchblox.com/security/data/fix/linux/debian-cve-2026-89987.md) | Sep 23, 2026 |
| Linux | microvm-kernel6.18 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | perf6.18 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | perf6.18-debuginfo amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | python3-perf6.18 amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |
| Linux | python3-perf6.18-debuginfo amzn 2023 | 1:6.18.54-121.166.amzn2023 | [ALAS2023-2026-3192](https://patchblox.com/security/data/fix/linux/alas2023-2026-3192.md) | Nov 7, 2026 |

---

Data as of 2026-11-08T00:53:09Z UTC. Source: Patchblox Patch Radar (https://patchblox.com/security/patch-radar). Patchblox finds out-of-date software on Windows, macOS and Linux and updates it through release rings: https://patchblox.com/demo

Free to use with attribution: show "Data: Patchblox Patch Radar" with a link to https://patchblox.com/security/patch-radar. Terms, including what needs a written agreement: https://patchblox.com/security/patch-radar/use-the-data

Product names, logos and trademarks shown on Patch Radar belong to their respective owners. They are used only to identify the software each security fix applies to and to help readers find their platform. Their use does not imply any affiliation with, or endorsement by, those owners, and Patchblox is not affiliated with any of them.
