Odebrany

CVE-2026-97533

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: Uzyskaj blokadę odczytu init_mm przy zmianach atrybutów, aby uniknąć UAF

Poprzednie zatwierdzenie chroniło przed wyścigami między ptdumpem a upadkiem CPA,
jednak nadal istnieje między zmianami atrybutów a załamaniem, jak zgłoszono
autor: Denis V. Lunev (połączony).

Gdy nastąpi zmiana atrybutu, moduł walker po tablicach stron bez blokady uzyskuje PTE
wpis, który później jest zapisywany poprzez set_pte_atomic():

...
-> zmień_stronę_attr_set_clr()
-> __change_page_attr_set_clr()
-> __change_page_attr()
-> _lookup_address_cpa()
-> adres_wyszukiwany_w_pgd_attr()
-> [bezblokowany moduł walker tabeli stron]
-> set_pte_atomic()

Nic nie stoi na przeszkodzie jednoczesnemu załamaniu się CPA, które może uwolnić rynek
PTE, który został tutaj pobrany, co spowodowało bezpłatne wykorzystanie.

Rozwiąż ten problem, rozwiązując blokadę zapisu mmap w init_mm po zwinięciu CPA
ścigaj się, uzyskując blokadę odczytu mmap na init_mm over
__change_page_attr_set_clr().

Blokuje to całą operację, po której następuje spacer i PTE
następuje zapis wpisu, rozwiązując wyścig.

Można to tutaj bezpiecznie zrobić, ponieważ przy wejściu nie są trzymane żadne blokady
__change_page_attr_set_clr().

Jednakże blokada nie może być utrzymywana na alokacji, ponieważ może to mieć miejsce przy alokacji
wyzwalaj regenerację, a zmniejszacze mogą rekurencyjnie wywoływać CPA, tworząc
możliwe zakleszczenia (init_mm -> ... -> fs_reclaim -> init_mm).

Tabela stron jest przydzielana, gdy trzeba podzielić dużą stronę:

-> zmień_stronę_attr_set_clr()
-> __change_page_attr_set_clr()
-> __change_page_attr()
-> split_large_page()
[pagetable_alloc() ]
-> __split_large_page()

Unikaj zakleszczeń, usuwając blokadę mmap w funkcji pagetable_alloc().
split_large_page() i śledź, czy jest to potrzebne, dodając nowy
Flaga „init_mm_read_locked” do struktury cpa_data.

Jest to bezpieczne, ponieważ __split_large_page() (wywoływana po przywróceniu blokad)
ponownie sprawdza, czy wpis tabeli stron jest taki sam jak przed
blokady są usuwane, a __change_page_attr() powtarza całą tabelę stron
chodzić za każdym razem, gdy następuje podział, więc równoczesny podział i upadek są
rozliczone.

Współbieżny ptdump jest również bezpieczny, ponieważ blokada jest usuwana tylko na tabelę stron
przydział, w którym to czasie tablica stron nie została jeszcze zmodyfikowana.

Flaga CPA_COLLAPSE jest ustawiana tylko przez set_memory_rox(), która wyłącznie
działa na zakresach vmalloc, a na x86 tylko w ramach mapowania modułów
przestrzeń.

Jest to ważne, ponieważ niektórzy rozmówcy bezpośrednio wywołują
__change_page_attr_set_clr(), omijając tę blokadę. Jednak nic z tego
działają w przestrzeni mapowania modułu.

* cpa_process_alias() - rekurencyjny pomocnik wywoływany przez
__change_page_attr_set_clr().
* __set_memory_enc_pgtable() - działa na bezpośrednim mapowaniu i (poprzez
__vmbus_ustanawianie_gpadl()) przestrzeń mapowania vmalloc.
* __set_pages_[n]p() - wywoływane przez set_direct_map_[nieprawidłowe, domyślne,
valid]_noflush(), __kernel_map_pages() - działa na mapie bezpośredniej.
* kernel_[un]map_pages_in_pgd() - działa na zakresach EFI.

Praca ta opiera się na doskonałej analizie błędu przeprowadzonej przez Denisa V. Luneva
z wdzięcznością.

[ dhansen: przejdź do głosu rozkazującego w dzienniku zmian ]

>_ 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