Skip to main content

Linux Kernel CVE-2026-53155

| EUVDEUVD-2026-39246 MEDIUM
2026-06-25 416baaa9-dc9f-4396-8d5f-8c081fb06d67 GHSA-7xgx-c4jr-vfq9
5.5
CVSS 3.1 · NVD
Share

Severity by source

NVD PRIMARY
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI
4.7 MEDIUM

AC:H reflects the niche hardware and CONFIG_MEM_SOFT_DIRTY prerequisite; AV:L and PR:L are unambiguous from the local, low-privilege execution requirement.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:L
SUSE
MEDIUM
qualitative

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

6
Analysis Generated
Jul 07, 2026 - 20:26 vuln.today
CVSS changed
Jul 07, 2026 - 20:22 NVD
5.5 (MEDIUM)
CVSS changed
Jul 07, 2026 - 20:22 NVD
5.5 (MEDIUM)
Patch available
Jun 25, 2026 - 10:32 EUVD
CVE Published
Jun 25, 2026 - 09:16 nvd
MEDIUM 5.5
CVE Published
Jun 25, 2026 - 09:16 cve.org
UNKNOWN (no severity yet)

DescriptionNVD

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.

  1. 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).

  1. The parent forks and the PMD entries are set to device-private read only

entries, entire_mapcount=2, softdirty still set.

  1. [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.

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

  1. [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.

AnalysisAI

Corrupted reverse-mapping (rmap) state in the Linux kernel's mm/huge_memory subsystem crashes or destabilizes affected systems through a flag misinterpretation in set_pmd_migration_entry() for device-private PMD entries. On x86-64 with CONFIG_MEM_SOFT_DIRTY enabled, the function incorrectly reads the softdirty bit as a write-permission flag - because _PAGE_SWP_SOFT_DIRTY aliases _PAGE_RW - causing migration entries to be marked writable when they should be read-only, ultimately triggering a VM_WARN assertion in __folio_add_anon_rmap() when an AnonExclusive folio reaches entire_mapcount=2. No public exploit exists and no active exploitation is confirmed; a vendor patch is available as of Linux 7.0.13 and 7.1.

Technical ContextAI

The vulnerable function set_pmd_migration_entry() in mm/huge_memory.c handles the conversion of a present PMD entry to a migration entry during page migration. Commit 65edfda6f3f2 ('mm/rmap: extend rmap and migration support device-private entries') introduced support for device-private PMD entries by switching to pmdp_huge_get_and_clear() in the softleaf (non-present, device-private) case, but left the downstream flag extraction logic calling pmd_write(), pmd_soft_dirty(), and pmd_uffd_wp() - functions designed for present PMD entries. On x86-64 with CONFIG_MEM_SOFT_DIRTY, the kernel defines _PAGE_SWP_SOFT_DIRTY as the same bit as _PAGE_RW, meaning pmd_write() called on a device-private (softleaf) PMD returns the softdirty state as if it were the write bit. When migration entries are then incorrectly flagged as writable and processed by remove_migration_pmd(), the RMAP_EXCLUSIVE flag is set for both parent and child mappings, violating the invariant enforced by VM_WARN_ON_FOLIO in __folio_add_anon_rmap() that a large AnonExclusive folio must have entire_mapcount <= 1. The affected CPE is cpe:2.3:o:linux:linux_kernel across the range from commit 65edfda6f3f2 through pre-fix, including 7.1 rc1-rc7. CWE is not formally assigned but the root cause class is incorrect use of field accessors on a non-present page table entry (a form of type confusion at the bitfield level).

RemediationAI

Apply the stable-tree fix commits available at https://git.kernel.org/stable/c/43e7f189769c512c843184a8a5892ac779a6bd90 (one stable branch) and https://git.kernel.org/stable/c/d7251c8d3f7cea76543abac6cf4ed15582c10846 (second stable branch). Upgrading to Linux 7.0.13 or Linux 7.1 includes the fix per EUVD data. As a compensating control for systems that cannot immediately be patched, disabling CONFIG_MEM_SOFT_DIRTY at kernel build time prevents the _PAGE_SWP_SOFT_DIRTY/_PAGE_RW aliasing that triggers the bug on x86-64, but this removes soft-dirty page tracking functionality required by CRIU (checkpoint/restore in userspace) - evaluate impact on workloads dependent on that feature before applying. Alternatively, systems without HMM device-private THP hardware or drivers are not exposed to the vulnerable code path and require no immediate action.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Not-Affected

Share

CVE-2026-53155 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy