CVE-2026-53155
Medium · 5.5CVSS
5.5
EPSS
0.1%
Published
Jun 25, 2026
CISA due date
—
Cloudanix analysis
A Linux memory-management bug can let a local program on certain accelerator-enabled systems destabilize the operating system until the kernel is updated.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
This Linux kernel memory-management flaw mishandles device-private transparent huge page PMD migration entries. The vulnerable code reads normal PMD flags such as writable, soft-dirty, and userfaultfd write-protect from a softleaf migration entry using the wrong helpers. On x86-64, soft-dirty state can be misinterpreted as write permission, causing read-only migrated mappings to be restored as writable. This can corrupt reverse-map accounting and create inconsistent AnonExclusive/mapcount state, potentially triggering kernel warnings, crashes, or memory-management corruption. Practical impact depends on kernel configuration and use of HMM/device-private memory features, such as GPU or accelerator memory migration support.
Why it matters to the business
Systems running affected Linux kernels with heterogeneous memory management or device-private memory features may be exposed to local reliability and integrity risk. In the most likely scenario, a local workload can trigger kernel warnings or denial of service through memory-management corruption. Because this issue is not in CISA KEV, has no known public exploit maturity, and has a very low EPSS score, broad internet-scale exploitation is unlikely; however, high-performance computing, GPU, AI/ML, virtualization, and accelerator-heavy environments should treat it as more relevant because they are more likely to use the affected code paths.
How an attack unfolds
An attacker would generally need local code execution on a system using a vulnerable kernel and device-private memory migration features. The attacker would allocate and fault in memory backed by transparent huge pages, cause migration to device-private memory, fork the process to create parent and child mappings, and then force a write/migration sequence that causes the kernel to interpret soft-dirty state as writability. The kernel may then install writable migration entries where read-only entries were intended, corrupt reverse-map state, and eventually hit kernel assertions or unstable memory-management behavior. There is no indication from the provided intelligence that this vulnerability is remotely exploitable, actively exploited, or used in ransomware campaigns.
How to fix it
Apply a Linux kernel update that includes the upstream fix for incorrect flag handling in set_pmd_migration_entry() for device-private PMD softleaf entries. If a vendor kernel is used, install the relevant distribution or appliance kernel security update once available. If immediate patching is not possible, reduce exposure by limiting untrusted local code execution on systems using HMM, ZONE_DEVICE, device-private memory, GPU/accelerator memory migration, or transparent huge pages. Where operationally feasible, disable or restrict device-private memory/HMM-related workloads until patched, especially on multi-user compute nodes.
How to confirm the fix worked
Confirm that the running kernel includes the fix for set_pmd_migration_entry() using the vendor advisory, package changelog, kernel source, or backport notes rather than relying only on the upstream version number. Validate that systems have rebooted into the updated kernel, not merely installed it. On source-based kernels, verify that set_pmd_migration_entry() references the correct softleaf entry fields for writable, soft-dirty, and userfaultfd write-protect state and only updates accessed/dirty flags for present entries. In test environments with appropriate hardware and configuration, run Linux HMM/device-private memory selftests, including huge-page migration scenarios, and confirm the kernel no longer emits reverse-map or AnonExclusive warnings.
Typical attack path
- Obtain local ability to run code on a Linux system using a vulnerable kernel.
- Exercise HMM/device-private memory functionality, typically through GPU or accelerator-backed memory migration paths.
- Create transparent huge page mappings and migrate them to device-private memory.
- Fork the process so parent and child share device-private PMD mappings with soft-dirty state.
- Trigger writes and migration back to RAM so the kernel misreads soft-dirty bits as writable state.
- Cause corrupted reverse-map and AnonExclusive accounting, potentially leading to kernel warnings, crashes, or memory-management instability.
How to detect it
There are no known public exploitation indicators from the provided intelligence, so detection should focus on signs that the vulnerable memory-management path was triggered. Review kernel logs, persistent journal entries, crash dumps, kdump/vmcore data, and system monitoring around unexplained reboots, kernel warnings, or crashes on systems using HMM/device-private memory, GPUs, accelerators, or transparent huge pages. Look for warnings involving AnonExclusive folios, folio_entire_mapcount, __folio_add_anon_rmap(), remove_migration_pmd(), set_pmd_migration_entry(), device-private migration, HMM tests, or transparent huge page migration. Correlate any such events with local user processes, GPU/accelerator workloads, container jobs, batch scheduler submissions, or test binaries exercising HMM/device-private memory. Absence of these artifacts does not prove non-exploitation because the issue may cause instability without leaving a clean application-level trace.
- VM_WARN_ON_FOLIO
- __folio_add_anon_rmap
- folio_entire_mapcount
- PageAnonExclusive
- AnonExclusive
- remove_migration_pmd
- set_pmd_migration_entry
- softleaf_is_migration_read
- pmdp_huge_get_and_clear
- device-private
- device private
- hmm_device_private
- anon_write_child
- test_hmm
- lib/test_hmm
- RMAP_EXCLUSIVE
- ZONE_DEVICE
- userfaultfd write-protect
- uffd-wp
What your security team should do
- Prioritize patching Linux systems that run GPU, accelerator, HMM, ZONE_DEVICE, AI/ML, HPC, or other device-private memory workloads.
- Inventory multi-user compute systems where untrusted users can run local code and verify whether they use affected kernel configurations or drivers.
- Track vendor kernel advisories and install the first fixed kernel available for each distribution or appliance image.
- After patch installation, reboot systems and verify the active running kernel is the fixed kernel.
- If patching is delayed, restrict untrusted local workloads on affected compute nodes and consider temporarily disabling affected accelerator memory migration features where feasible.
- Monitor kernel logs for reverse-map, AnonExclusive, migration PMD, and HMM selftest-related warnings or crashes.
- Treat exploitation likelihood as currently low because there is no KEV listing, no ransomware association, and no known exploit maturity, but do not ignore high-value shared compute platforms where local kernel denial of service is material.
The record
In the Linux kernel, the following vulnerability has been resolved: mm/huge_memory: use correct flags for device private PMD entry Commit 65edfda6f3f2 ("mm/rmap: extend rmap and migration support device-private entries") updated set_pmd_migration_entry() to use pmdp_huge_get_and_clear() in the softleaf case, but made no further adjustments to the function itself. Therefore this function continues to incorrectly use pmd_write(), pmd_soft_dirty() and pmd_uffd_wp() to determine whether the installed migration entry should be marked writable, softdirty or uffd-wp respectively. Whilst all are incorrect, the most problematic of these is pmd_write(), as this can lead to corrupted rmap state. On x86-64 _PAGE_SWP_SOFT_DIRTY is aliased to _PAGE_RW. So calling pmd_write() on a softleaf will return the softdirty state encoded in the entry, assuming CONFIG_MEM_SOFT_DIRTY was enabled. This was observed when running the hmm.hmm_device_private.anon_write_child selftest: 1. The test faults in a range then migrates it such that a device-private THP range is established. 2. The parent then migrates it to a device-private writable PMD entry whose folio is entirely AnonExclusive with entire_mapcount=1, softdirty set (accidentally correct write state). 3. The parent forks and the PMD entries are set to device-private read only entries, entire_mapcount=2, softdirty still set. 4. [BUG] The child writes to the range then migrates to RAM - intending to install non-writable migration entries - but replacing parent and child PMD mappings with WRITABLE entries due to misinterpreting the softdirty bit. 5. In remove_migration_pmd(), if !softleaf_is_migration_read(entry) we set the RMAP_EXCLUSIVE flag when calling folio_add_anon_rmap_pmd() for both parent and child, which are therefore AnonExclusive. 6. [SPLAT] Child sets migrated folio entire_mapcount=1, parent sets entire_mapcount=2 and we end up with an AnonExclusive folio with entire_mapcount=2! Assert fires in __folio_add_anon_rmap(): VM_WARN_ON_FOLIO(folio_test_large(folio) && folio_entire_mapcount(folio) > 1 && PageAnonExclusive(cur_page), folio) This patch fixes the issue by correctly referencing the softleaf entry fields for writable, softdirty and uffd-wp in set_pmd_migration_entry(). It also only updates A/D flags if the entry is present as these are otherwise not meaningful for a softleaf entry. This patch also flips the if (!present) { ... } else { ... } logic in set_pmd_migration_entry() so it is easier to understand, and adds some comments to make things clearer. I was able to bisect this to commit 775465fd26a3 ("lib/test_hmm: add zone device private THP test infrastructure") which first exposes this bug as it was the commit that permitted test_hmm to generate the test. However commit 65edfda6f3f2 ("mm/rmap: extend rmap and migration support device-private entries") is the commit that actually enabled this behaviour.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|