CVE-2026-98468
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
KVM: arm64: Napraw fałszywe ostrzeżenie dotyczące łagodnego wyścigu po porzuceniu na etapie 2
kvmtool został użyty do ustanowienia gościa L1 z 8 procesorami i 8 GiB pamięci RAM, an
Gość L2 z 4 procesorami i 4 GiB pamięci RAM oraz gość L3 z 2 procesorami i 2 GiB
RAM, z których cała została następnie zamknięta.
Pod presją pamięci w hoście L0 zaobserwowano ostrzeżenia z powodu
migracja wywołana zagęszczeniem:
OSTRZEŻENIE: arch/arm64/kvm/mmu.c:336 w __unmap_stage2_range+0x64/0x80,
Procesor nr 5: kcompactd0/66
Co z kolei zostało wywołane przez powiadomienie MMU o unieważnieniu hosta:
mmu_notifier_invalidate_range_start()
-> ... -> kvm_mmu_notifier_invalidate_range_start()
-> kvm_mmu_unmap_gfn_range()
-> kvm_unmap_gfn_range()
-> kvm_nested_s2_unmap()
-> kvm_stage2_unmap_range()
-> __unmap_stage2_range()
-> etap2_zastosuj_zakres()
<- -EINVAL, wyzwalanie WARN_ON()
Wyścigi z rozbiórką tabel stron etapu 2 przez L0:
wyjście_mm()
-> mmput()
-> __mmput()
-> wyjście_mmap()
-> mmu_notifier_release()
-> ... -> kvm_mmu_notifier_release()
-> kvm_flush_shadow_all()
-> kvm_arch_flush_shadow_all()
-> kvm_free_stage2_pgd()
-> [pobierz kvm->mmu_lock do zapisu ]
-> mmu->pgt = NULL [między innymi zadaniami]
-> [ zwolnij kvm->mmu_lock do zapisu ]
Okazuje się, że istnieje łagodna rasa, której skutkiem jest fałszywe ostrzeżenie:
Wątek A - powiadom: migracja | Wątek B - powiadom: zwolnij
-----------------------------------------|---------------------------------
< kvm->mmu_lock wstrzymany > |
stage2_apply_range() |
pobierz mmu->pgt, sprawdź !NULL |
... | kvm_arch_flush_shadow_all()
cond_resched_rwlock_write(); | <walcz, śpij kvm->mmu_lock >
< upuść kvm->mmu_lock > | <pobierz kvm->mmu_lock>
| ...
| kvm_free_stage2_pgd()
| mmu->pgt = NULL
| <unieważnij MMU>
| ...
| < zwolnij kvm->mmu_lock >
[zaplanowane] |
stage2_apply_range() |
< pętla do następnego > |
get, mmu->pgt, sprawdź !NULL |
ma wartość NULL, zwróć -EINVAL |
__unmap_stage2_range() |
WARN_ON(-EINVAL) <--- całkowicie fałszywe - wyścig został obsłużony
poprawnie.
Napraw fałszywe ostrzeżenie, aktualizując funkcję stage2_apply_range() tak, aby już nie występowała
traktuj równoczesne rozbicie PGT przy zwolnieniu blokady jako błąd - niezależnie od tego, czy
walker burzy tabele stron lub robi coś innego. To jest
uzasadniony powód do przerwania operacji bez błędu.
Dzięki temu ostrzeżenie będzie obowiązywać we wszystkich innych okolicznościach.
W praktyce tylko __unmap_stage2_range() faktycznie robi cokolwiek z
błąd, więc ma to wpływ tylko na to.
>_ 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