{"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:\n\nmm/mempolicy: skip non-present PMDs when queueing folios\n\nPatch series \"mm: handle device-private PMDs in walk callbacks\", v3.\n\nSince 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","slug":"CVE-2026-89758","body":"## Overview\n\nIn the Linux kernel, the following vulnerability has been resolved:\n\nmm/mempolicy: skip non-present PMDs when queueing folios\n\nPatch series \"mm: handle device-private PMDs in walk callbacks\", v3.\n\nSince commit 368076f52ebe (\"mm/huge_memory: add device-private THP support\nto PMD operations\") a PMD may hold a device-private swap entry whenever an\nHMM-based GPU driver migrates an anonymous THP folio to device memory via\nmigrate_vma_pages().\n\npmd_trans_huge_lock() succeeds for such PMDs (pmd_is_huge() returns true\nfor any non-present, non-none huge PMD), so several MM walk callbacks that\nused to assume present THP or migration entry are now reachable with a\ndevice-private PMD.  The results range from a VM_BUG_ON() firing on debug\nkernels, to an oops on a bogus vmemmap dereference, to silently isolating\nan unrelated live folio from LRU in the aliasing case.\n\n\nThis patch (of 3):\n\nqueue_folios_pmd() is called under pmd_trans_huge_lock(), whose\npmd_is_huge() check returns true for any non-present, non-none PMD\nsoftleaf.  Passing such a PMD to pmd_folio() treats the softleaf encoding\nas a hardware PFN and can return a bogus folio pointer.\n\nMirror queue_folios_pte_range(): handle non-present entries before looking\nup a folio.  Keep migration entries counted as failures, but skip other\nnon-present PMDs such as device-private entries.\n\nPotential trigger: an HMM-based GPU driver migrates an anonymous THP folio\nto device memory via migrate_vma_pages(), leaving a device-private PMD. \nUserspace then calls mbind(), migrate_pages() or set_mempolicy_home_node()\non that range.\n\n## Affected\n\n- `Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 < 3d927093b2add7ced588a926c3dc5d7a83f18596`\n- `Linux >= 368076f52ebeecd33e10a9f80905d7508b6b6149 < 2858b4027f491e6fdb8ee2d8923798b619bf2791`\n- `Linux 6.19`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Vendor advisories\n\n- **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)","depth":"twilight","depthScore":43,"depthScoreParts":{"impact":42.9,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[{"seq":224570,"id":"CVE-2026-89758","ts":1792401414359,"field":"cvss","old":"7","new":"7.8"},{"seq":208939,"id":"CVE-2026-89758","ts":1790062296081,"field":"cvss","old":"4.7","new":"7"},{"seq":208938,"id":"CVE-2026-89758","ts":1790062296081,"field":"severity","old":"medium","new":"high"},{"seq":202960,"id":"CVE-2026-89758","ts":1789403733122,"field":"cvss","old":"7.8","new":"4.7"},{"seq":202959,"id":"CVE-2026-89758","ts":1789403733122,"field":"severity","old":"high","new":"medium"},{"seq":197668,"id":"CVE-2026-89758","ts":1789384318320,"field":"cvss","old":"4.7","new":"7.8"},{"seq":197667,"id":"CVE-2026-89758","ts":1789384318320,"field":"severity","old":"medium","new":"high"},{"seq":183649,"id":"CVE-2026-89758","ts":1789356676255,"field":"cvss","old":"7.8","new":"4.7"},{"seq":183648,"id":"CVE-2026-89758","ts":1789356676255,"field":"severity","old":"high","new":"medium"},{"seq":153644,"id":"CVE-2026-89758","ts":1789285351699,"field":"cvss","old":null,"new":"7.8"},{"seq":153643,"id":"CVE-2026-89758","ts":1789285351699,"field":"severity","old":"none","new":"high"},{"seq":147666,"id":"CVE-2026-89758","ts":1789270211803,"field":"cvss","old":null,"new":"4.7"},{"seq":147665,"id":"CVE-2026-89758","ts":1789270211803,"field":"severity","old":"none","new":"medium"},{"seq":109420,"id":"CVE-2026-89758","ts":1789183731844,"field":"cvss","old":null,"new":"4.7"},{"seq":109419,"id":"CVE-2026-89758","ts":1789183731844,"field":"severity","old":"none","new":"medium"}]}