---
id: CVE-2026-89758
title: 'mm/mempolicy: skip non-present PMDs when queueing folios'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  mm/mempolicy: skip non-present PMDs when queueing folios

  Patch series "mm: handle device-private PMDs in walk callbacks", v3.

  Since commit 368076f52ebe ("mm/huge_memo…
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
cwe:
  - CWE-824
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 <
    3d927093b2add7ced588a926c3dc5d7a83f18596
  - >-
    Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 <
    2858b4027f491e6fdb8ee2d8923798b619bf2791
  - Linux 6.19
published: '2026-09-11'
updated: '2026-10-19'
sourceUpdated: '2026-10-19T08:52:11.845Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-89758'
references:
  - url: 'https://git.kernel.org/stable/c/3d927093b2add7ced588a926c3dc5d7a83f18596'
  - url: 'https://git.kernel.org/stable/c/2858b4027f491e6fdb8ee2d8923798b619bf2791'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89758.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-89758'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2532153'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-89758'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-89758'
  - url: >-
      https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-89758.mbox
tags:
  - cve.org
  - csaf
  - vex
  - red-hat
epss: 0.00165
epssPercentile: 0.05677
scores:
  cna: 7.8
  vendor: 7
ingestedAt: '2026-09-14T15:23:07.472Z'
---

## Overview

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

mm/mempolicy: skip non-present PMDs when queueing folios

Patch series "mm: handle device-private PMDs in walk callbacks", v3.

Since commit 368076f52ebe ("mm/huge_memory: add device-private THP support
to PMD operations") a PMD may hold a device-private swap entry whenever an
HMM-based GPU driver migrates an anonymous THP folio to device memory via
migrate_vma_pages().

pmd_trans_huge_lock() succeeds for such PMDs (pmd_is_huge() returns true
for any non-present, non-none huge PMD), so several MM walk callbacks that
used to assume present THP or migration entry are now reachable with a
device-private PMD.  The results range from a VM_BUG_ON() firing on debug
kernels, to an oops on a bogus vmemmap dereference, to silently isolating
an unrelated live folio from LRU in the aliasing case.


This patch (of 3):

queue_folios_pmd() is called under pmd_trans_huge_lock(), whose
pmd_is_huge() check returns true for any non-present, non-none PMD
softleaf.  Passing such a PMD to pmd_folio() treats the softleaf encoding
as a hardware PFN and can return a bogus folio pointer.

Mirror queue_folios_pte_range(): handle non-present entries before looking
up a folio.  Keep migration entries counted as failures, but skip other
non-present PMDs such as device-private entries.

Potential trigger: an HMM-based GPU driver migrates an anonymous THP folio
to device memory via migrate_vma_pages(), leaving a device-private PMD. 
Userspace then calls mbind(), migrate_pages() or set_mempolicy_home_node()
on that range.

## Affected

- `Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 < 3d927093b2add7ced588a926c3dc5d7a83f18596`
- `Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 < 2858b4027f491e6fdb8ee2d8923798b619bf2791`
- `Linux 6.19`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 6 · no fix planned: Red Hat Enterprise Linux 6 · updated 2026-09-21 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89758.json)
