CVE-2026-98467 in Linux
Riassunto
di VulDB • 18/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
KVM: arm64: nv: Corretto il dereferenziazione di puntatore nullo (null ptr deref) in caso di race condition su wp/unmap annidati e teardown
Il commit 7270cc9157f4 ("KVM: arm64: nv: Handle VNCR_EL2 invalidation from MMU notifiers") ha introdotto l'invalidazione di VNCR_EL2 sia in kvm_nested_s2_unmap() che in kvm_nested_s2_wp().
Tuttavia, nel momento in cui questa operazione viene eseguita, un teardown concorrente dello stage 2 per una guest annidata può causare la messa a NULL di kvm->arch.mmu.pgt.
Ciò avviene in kvm_flush_shadow_all() -> kvm_arch_flush_shadow_all() -> kvm_free_stage2_pgd() ed è eseguito sotto il lock kvm->mmu_lock.
Il commit ec14c272408a ("KVM: arm64: nv: Unmap/flush shadow stage 2 page tables") ha introdotto il teardown dell'intero intervallo MMU annidato, che invoca successivamente stage2_apply_range() con resched=true:
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() -> stage2_apply_range()
Ciò significa che stage2_apply_range() può rilasciare il lock kvm->mmu_lock, consentendo così un avanzamento concorrente in parallelo con kvm_arch_flush_shadow_all().
Se kvm_arch_flush_shadow_all() avanza oltre stage2_apply_range() e completa la propria operazione, garantisce una dereferenziazione di puntatore nullo (NULL pointer deref).
Poiché kvm_free_stage2_pgd() viene eseguito sotto il lock kvm->mmu_lock, questo sarà osservato come NULL o meno ed è serializzato rispetto a kvm_free_stage2_pgd().
Risolvere il problema astrae l'invalidazione in una nuova funzione, kvm_invalidate_vncr_ipa_all(), e verifica che pgt non sia nullo prima di dereferenziarlo.
If you want to get best quality of vulnerability data, you may have to visit VulDB.