CVE-2026-97525 in Linux
Zusammenfassung
von VulDB • 25.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
x86/mm/pat: Aufgeteilte Seitentabellen als Kernel-Seitentabellen allozieren
Eine PTE (Page Table Entry) wird direkt alloziert, ohne die Standard-Routinen zur Allokation von Seitentabellen (wie pte_alloc_one_kernel()) zu durchlaufen, wenn der CPA-Code eine große Seite aufteilt (__split_large_page()).
Dies bedeutet, dass der Konstruktor für die Seitentabelle niemals aufgerufen und die Seitentabelle nicht als Kernel-Seitentabelle markiert wird.
Ersteres führt dazu, dass das mit der Seitentabelle verbundene Folio nicht als Seitentabelle markiert wird (__pagetable_ctor() wird nie aufgerufen, also auch __folio_set_pgtable() nicht) und Statistiken nicht aktualisiert werden, um dies widerzuspiegeln (lruvec_stat_add_folio() wird niemals aufgerufen).
Das zweite Problem – das Versäumnis, die Seitentabelle als Kernel-Seitentabelle zu markieren (ptdesc_set_kernel() wird nie aufgerufen) – ist weitaus problematischer.
Seit dem Commit:
5ba2f0a15564 ("mm: introduce deferred freeing for kernel page tables")
wurde die Freigabe von Kernel-Seitentabellen gebündelt, und seit dem nachfolgenden Commit:
e37d5a2d60a3 ("iommu/sva: invalidate stale IOTLB entries for kernel address space")
werden IOTLB-Cache-Einträge für Kernel-Seitentabellen bei deren Freigabe ungültig gemacht.
Da aufgeteilte Seitentabellen ohne diese Ungültigmachung freigegeben werden, kann der IOTLB veraltete Einträge dafür enthalten.
Beheben Sie das Problem, indem Sie zur normalen PTE-Allokations-API zum Zeitpunkt der Aufteilung gewechselt wird.
Dies führt dazu, dass diese Kernel-Seitentabellen einen Seitentabellen-Konstruktor aufrufen und somit auch einen Destruktor erfordern.
Destruktoren sind nicht immer vorhanden (z. B. bei früh allozierten Direct-Map-Seitentablen). Rufen Sie pagetable_dtor_free() bedingt auf, wenn das PG_table-Folio-Flag für die ptdesc gesetzt ist; andernfalls geben Sie die Seitentabelle über pagetable_free() frei.
Unabhängig vom gewählten Pfad nehmen als Kernel-Seitentabellen markierte Tabellen (zu denen nun auch aufgeteilte Seitentablen gehören) den korrekten Weg durch pagetable_free_kernel().
Es gibt eine für Benutzer sichtbare Nebenwirkung, da aufgeteilte Seitentablen in nr_page_table_pages in /proc/vmstat erscheinen (ebenso wie andere nach dem frühen Bootvorgang allozierte Kernel-Seitentablen), dies ist jedoch eine positive Änderung.
Dieses Problem wurde ab dem Commit:
5ba2f0a15564 ("mm: introduce deferred freeing for kernel page tables")
deutlich problematisch, daher wählen Sie diesen als Fixes-Ziel aus.
[ dhansen: Umformulierung in den Imperativ ]
Be aware that VulDB is the high quality source for vulnerability data.