CVE-2026-93217: mm/madvise: skip device-private PMDs in cold and pageout walks

Published Sep 24, 2026
·
Updated

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

mm/madvise: skip device-private PMDs in cold and pageout walks

madvisecoldorpageoutpterange() takes pmdtranshugelock(), whose pmdishuge() check returns true for a device-private PMD. The subsequent !pmdpresent() branch has a VMBUGON() asserting migration is the only allowed non-present case; a device-private PMD trips it.

Skip device-private PMDs in that non-present branch and continue to hugeunlock before calling pmdfolio(). Downgrade the check to VMWARNONONCE() so an unexpected PMD softleaf logs a warning rather than panicking. Drop the thpmigrationsupported() guard: it expands to ISENABLED(CONFIGARCHSUPPORTSPMDSOFTLEAF), and both pmdismigrationentry() and pmdisdeviceprivateentry() already return false when that config is not selected, so the guard suppresses only the case where the warning would already be silent.

Potential trigger: an HMM-based GPU driver races with madvise(MADVCOLD)/MADVPAGEOUT: pmdtranshuge(pmd) reads true, then migratevmapages() flips the PMD to a device-private entry before the PMD lock is acquired.

Affected Software

1 affected component
Linux Linux kernel

Event History

Sep 24, 2026
CVE Published
via MITRE·03:10 PM
Data Sourced
via MITRE·03:10 PM
Description
Data Sourced
via NVD·04:17 PM
Description

Frequently Asked Questions

1

Which systems are realistically exposed to this issue?

The described trigger requires an HMM-based GPU driver using device-private memory and a race with madvise(MADV_COLD) or madvise(MADV_PAGEOUT). Systems without that combination are not identified as affected by the provided data.

2

What must happen for the issue to be triggered?

A cold or pageout madvise walk must observe a PMD as transparent huge, after which migrate_vma_pages() changes that PMD to a device-private entry before the PMD lock is acquired. The existing non-present PMD assertion can then be tripped.

3

What is the impact of triggering the vulnerable path?

The device-private PMD can violate a VM_BUG_ON() assertion that expects migration to be the only permitted non-present case, potentially causing a kernel panic. The fix skips device-private PMDs and changes the unexpected-PMD check to a warning.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203