Odebrany

CVE-2026-99178

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/kvm: Nie używaj flag asynchronicznych #PF na jądrze #PF w kontekście NMI

Przez wektor #PF przychodzi asynchroniczne zdarzenie #PF „strona nieobecna”,
a jego przyczyna znajduje się w pliku apf_reason.flags na procesor, dopóki
__kvm_handle_async_pf() czyta i kasuje. Jeśli NMI dotrze później
zdarzenie jest wstrzykiwane i zanim procedura obsługi #PF odczyta flagi, oraz
sama procedura obsługi NMI pobiera #PF, ten błąd odczytuje i kasuje
flagi należące do #PF przerwał. Następnie znajduje przerwania
wyłączony w kontekście NMI, który przerwał, i wpada w panikę:

Panika jądra – brak synchronizacji: Host wstrzyknął asynchronizację #PF w przerwaniu
region niepełnosprawny
Zadzwoń do śledzenia:
<NMI>
panika+0x52/0x60
__kvm_handle_async_pf+0xb0/0xb0
exc_page_fault+0x71/0xb0
asm_exc_page_fault+0x27/0x30
RIP: 0010:__get_user_nocheck_8+0x6/0x20
perf_callchain_user+0x147/0x1a0
get_perf_callchain+0x12d/0x1c0
...
perf_event_nmi_handler+0x26/0x50
exc_nmi+0xe8/0x110
RIP: 0010:asm_exc_page_fault+0x0/0x30
</NMI>

Ostatnia linia RIP pokazuje lądowanie NMI w pierwszej instrukcji
wpis #PF. perf z łańcuchami wywołań użytkowników powoduje taki błąd: the
próbkowanie NMI przegląda stos użytkownika za pomocą __get_user(), co powoduje błąd, gdy
zapisany wskaźnik ramki nie jest prawidłowym adresem użytkownika lub przeglądanie kończy się
szczyt stosu. To samo okno istnieje, gdy KVM działa jako plik
Hiperwizor L1 z DELIVERY_AS_PF_VMEXIT, później sam odczytuje flagi
wyjście #PF VM.

Kod wejściowy NMI zapisuje i odtwarza CR2 dla tego zagnieżdżenia, ale nie
przyczyna asynchronizacji #PF. Andy Lutomirski opisał wyścig z wyczynami jako
na przykład, gdy w 2020 r. przerobiono asynchroniczne dostarczanie #PF [1]. Zapisywanie i
Omówiono tam usunięcie flag w NMI, obok CR2, ale
nie połączone.

Od czasu tej przeróbki Linux przestał ustawiać KVM_ASYNC_PF_SEND_ALWAYS,
więc host dostarcza „strona nieobecna” tylko w przypadku błędów trybu użytkownika i
błąd trybu jądra w kontekście NMI (w tym tryb jądra #MC i #DB)
nie może być błędem strony asynchronicznej. W takim przypadku wróć bez dotykania
flagi, tak aby przerwany program obsługi stwierdził, że są one nienaruszone.

Testowane na wersji 7.3-rc5 na 4-vCPU, 2 GiB gościa przywrócone z migawki
którego pamięć jest obsługiwana na żądanie poprzez userfaultfd, więc odczyt
z powrotem pobiera asynchroniczne #PF, podczas gdy każdy wątek próbkuje cykle sprzętowe
z łańcuchami wywołań użytkowników i wskazuje swój wskaźnik ramki na niezamapowaną stronę.
Bez tej łatki gość wpadał w panikę jak powyżej w 3 z 3 seriach. Z tym,
gość przeżył 3 z 3 serii po 60 sekund, a gospodarz się policzył
148 441 do 153 334 kvm_async_pf_not_present zdarzeń w ciągu pierwszych 20
sekundy każdego. 18.06.50 wyniki były takie same: gość
wpadł w panikę bez plastra i przeżył z nim.

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