Odebrany

CVE-2026-93066

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

x86/mm/pat: Weź cpa_lock wokół zwinięcia dużej strony

Ładowanie i rozładowywanie modułów jednocześnie na kilku procesorach w KASAN
build, z krótkim opóźnieniem wprowadzonym przy wyszukiwaniu tabeli stron CPA
poszerzyć okno, usterki w ciągu kilku minut:

BŁĄD: KASAN: użycie po zwolnieniu w __change_page_attr+0x7cc/0x7e0
Zapisz rozmiar 8 pod adresem ffff888181139718 za pomocą zadania modprobe
...
Błędny adres należy do strony fizycznej:
pfn:0x181139 ... typ_strony: f2(tabela)

cpa_collapse_large_pages() odbudowuje PMD liścia z jego 4K PTE i
zwalnia stare strony tabeli PTE, podczas gdy __change_page_attr() pobiera plik a
Wskaźnik PTE z bezblokady lookup_address_in_pgd_attr() i zapisuje
to za pomocą set_pte_atomic() dopiero później. Kiedy tekst modułu jest udostępniany z
wspólne, duże mapowanie ROX, oba działają na tym samym PMD:

CPU A (ładowanie modułu) CPU B (finalizowanie modułu)
---------------------------------- ------------------
excmem_make_temp_rw
set_memory_nx
__change_page_attr
podział 2M -> 4K tabela P
kpte = &P[i] (bez blokady)
excmem_restore_rox
set_memory_rox (CPA_COLLAPSE)
cpa_collapse_large_pages
odbudować liść PMD
spłucz_tlb_all
pagetable_free(P)
set_pte_atomic(kpte, ...)
-> pisze do uwolnionego P

P jest stroną tabeli stron (typ_strony: tabela), używaną ponownie od razu, więc
write psuje wszystko, co znalazło się na następnej stronie: złą-pte lub złą-stronę
ikona lub błąd krytyczny po przekształceniu P w tekst tylko do odczytu.

Funkcja Flush_tlb_all() przed free nie zamyka tego: tylko IPI
serializuje względem walkerów tablic stronicowych, które działają z wyłączonymi przerwaniami
(np. GUP-szybki); spacer w __change_page_attr() działa z przerwaniami
włączony, więc nic nie stoi na przeszkodzie, aby przytrzymał nieaktualny wskaźnik w P.

Serializuj zwinięcie - przebudowa PMD, opróżnienie TLB i tabela PTE
free - pod cpa_lock, teraz działa ta sama blokada __change_page_attr().
bezwarunkowo od zatwierdzenia („x86/mm/pat: przestań włączać bramkowanie cpa_lock
debug_pagealloc_enabled()"), więc współbieżny walker nie może już tego zrobić
przytrzymaj wskaźnik w tabeli, która zawali się wkrótce.

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org