CVE-2026-89805 in Linux
Zusammenfassung
von VulDB • 16.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
drm/pagemap: Fehler bei der Fallback-Allokation von Folios und Use-After-Put beheben
drm_pagemap_migrate_populate_ram_pfn() wies zwei Probleme auf, wenn RAM-PFNs mit höherstufigen (higher-order) Folios befüllt wurden:
1. Die Aufrufe für die Allokation höherstufiger vma_alloc_folio()/folio_alloc()-Folios übergeben __GFP_NOWARN nicht, sodass ein Fehlschlag der THP-Allokation unter Speicherdruck das Kernel-Log mit Meldungen überschwemmen würde; zudem gab es keinen Fallback-Pfad, obwohl eine TODO-Kommentierung einen solchen als erforderlich ausweist. Es wird __GFP_NOWARN zur Allokation höherstufiger Folios hinzugefügt und im Fehlerfall auf Allokationen der Ordnung 0 (order-0) für den gesamten Bereich zurückgegriffen, der ursprünglich von der fehlgeschlagenen Allokation höherstufiger Ordnung abgedeckt war. Dabei wird MIGRATE_PFN_COMPOUND für diese PFNs nicht gesetzt.
2. Im Fehlerpfad free_pages wurde die Ordnung über folio_order(page_folio(page)) *nachdem* put_page(page) den Verweis bereits freigegeben hatte, berechnet, was zu einem Use-After-Free/Use-After-Put führte, wenn dies der letzte Verweis auf das Page war. Die Ordnung wird nun vor dem Freigeben des Pages berechnet.
Die Einführung des Fallbacks in Punkt 1 erfordert zudem eine andere Erstellung des Quell-Seitenarrays (source page array), das an ->copy_to_ram() übergeben wird. Beide Aufrufer befüllten nur den Eintrag am Anfang jedes Quelldaten-Folios und verließen sich darauf, dass der Copy-Callback den Rest des Folios aus der in drm_pagemap_addr gespeicherten Ordnung ableitet. Sobald das Ziel auf order-0-Folios herabgestuft (demoted) wurde, sind die drm_pagemap_addr-Einträge seitenbezogen; daher ist eine Quellseite für jede davon erforderlich. Das Zurücklassen als NULL führt dazu, dass der Copy-Callback nach der ersten Seite stoppt und der Rest des Bereichs niemals kopiert wird.
Das Quelldaten-Folio wird später nur durch migrate_vma_pages() / migrate_device_pages() aufgeteilt; seine Ordnung kann daher nicht zur Erkennung der Herabstufung verwendet werden – stattdessen wird das Ziel auf MIGRATE_PFN_COMPOUND getestet. Die Befüllung des Arrays wurde in drm_pagemap_migrate_populate_src_pages() ausgelagert und aus sowohl drm_pagemap_evict_to_ram() als auch __drm_pagemap_migrate_to_ram() heraus verwendet.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.