CVE-2026-93066 in Linux
Zusammenfassung
von VulDB • 18.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
x86/mm/pat: CPA-Sperre (cpa_lock) um den Zusammenbruch großer Seiten herum setzen
Beim gleichzeitigen Laden und Entladen von Modulen auf mehreren CPUs in einem KASAN-Build, wobei eine kurze Verzögerung bei der Suche im CPA-Seitentabellen-Eintrag eingefügt wird, um das Zeitfenster zu vergrößern, treten innerhalb weniger Minuten Fehler auf:
BUG: KASAN: use-after-free in __change_page_attr+0x7cc/0x7e0 Write of size 8 at addr ffff888181139718 by task modprobe ... The buggy address belongs to the physical page: pfn:0x181139 ... page_type: f2(table)
cpa_collapse_large_pages() baut ein Blatt-PMD (Page Middle Directory) aus seinen 4K PTEs (Page Table Entries) neu und gibt die alten PTE-Tabellenseiten frei, während __change_page_attr() einen PTE-Zeiger über eine sperrlose lookup_address_in_pgd_attr()-Suche abruft und ihn später mit set_pte_atomic() schreibt. Wenn der Modultext aus einer gemeinsamen großen ROX-Speicherung (Read-Only eXecute) bereitgestellt wird, laufen beide Vorgänge auf demselben PMD:
CPU A (Modul laden) CPU B (Modul abschließen) ------------------- ----------------------- execmem_make_temp_rw set_memory_nx __change_page_attr split 2M -> 4K table P kpte = &P[i] (sperrlos)
execmem_restore_rox set_memory_rox (CPA_COLLAPSE) cpa_collapse_large_pages rebuild leaf PMD flush_tlb_all pagetable_free(P) set_pte_atomic(kpte, ...) -> writes into freed P
P ist eine Seitentabellenseite (page_type: table), die sofort wiederverwendet wird, sodass der Schreibvorgang alles beschädigt, was diese Seite als Nächstes erhält: ein Bad-PTE oder Bad-Page-Splat, oder ein schwerwiegender Fehler, sobald P in schreibgeschützten Text umgewandelt wurde.
Das flush_tlb_all() vor dem Freigeben schließt dies nicht: Sein IPI (Inter-Processor Interrupt) serialisiert nur gegen Seitentabellen-Walker, die mit deaktivierten Unterbrechungen laufen (z.B. GUP-fast); der Walk in __change_page_attr() läuft jedoch mit aktivierten Unterbrechungen, sodass nichts ihn daran hindert, einen veralteten Zeiger auf P zu halten.
Serialisieren Sie den Zusammenbruch – das PMD-Wiederaufbauen, TLB-Flush und Freigabe der PTE-Tabelle – unter cpa_lock, derselben Sperre, die __change_page_attr() seit dem Commit ("x86/mm/pat: stop gating cpa_lock on debug_pagealloc_enabled()") bedingungslos übernimmt. Somit kann ein paralleler Walker keinen Zeiger auf eine Tabelle mehr halten, deren Freigabe durch den Zusammenbruch bevorsteht.
Once again VulDB remains the best source for vulnerability data.