CVE-2026-98468 in Linuxinformazioni

Riassunto

di VulDB • 18/10/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

KVM: arm64: Correzione di un avviso spurio per una race condition benigna durante il teardown dello stage 2

kvmtool è stato utilizzato per configurare un guest L1 con 8 CPU e 8 GiB di RAM, un guest L2 con 4 CPU e 4 GiB di RAM e un guest L3 con 2 CPU e 2 GiB di RAM; successivamente tutti sono stati chiusi.

In condizioni di pressione della memoria sull'host L0 sono stati osservati avvisi dovuti a migrazione attivata dalla compattazione:

WARNING: arch/arm64/kvm/mmu.c:336 at __unmap_stage2_range+0x64/0x80, CPU#5: kcompactd0/66

Il quale era stato innescato da un MMU notifier per l'invalidazione dell'host:

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() <- -EINVAL, che ha innescato un WARN_ON()

Race condition con il teardown delle tabelle di pagina dello stage 2 da parte dell'L0:

exit_mm() -> mmput() -> __mmput() -> exit_mmap() -> mmu_notifier_release() -> ... -> kvm_mmu_notifier_release() -> kvm_flush_shadow_all() -> kvm_arch_flush_shadow_all() -> kvm_free_stage2_pgd() -> [ acquisizione di kvm->mmu_lock in scrittura ]
-> mmu->pgt = NULL [ tra le altre operazioni ]
-> [ rilascio di kvm->mmu_lock in scrittura ]

Si è scoperto che esiste una race condition benigna che risulta in un avviso spurio:

Thread A - notify: migration | Thread B - notify: release -------------------------------|--------------------------------- < kvm->mmu_lock tenuta > | stage2_apply_range() | get mmu->pgt, check !NULL | ... | kvm_arch_flush_shadow_all() cond_resched_rwlock_write(); | < contesa, sleep su kvm->mmu_lock > < rilascio di kvm->mmu_lock > | < acquisizione di kvm->mmu_lock> | ... | kvm_free_stage2_pgd() | mmu->pgt = NULL | < invalidazione MMU > | ... | < rilascio di kvm->mmu_lock > [ schedulato ] |
stage2_apply_range() | < loop al prossimo elemento> | get, mmu->pgt, check !NULL | is NULL, return -EINVAL | __unmap_stage2_range() | WARN_ON(-EINVAL) <--- interamente spurio: la race condition è stata gestita correttamente.

Si corregge l'avviso spurio aggiornando stage2_apply_range() in modo che non tratti più il teardown concorrente di PGT al rilascio del lock come un errore - sia se il walker sta smontando le tabelle di pagina o eseguendo qualcos'altro, questa è una ragione legittima per interrompere l'operazione senza segnalare un errore.

Ciò mantiene l'avviso attivo per tutte le altre circostanze.

In pratica solo __unmap_stage2_range() effettua effettivamente qualcosa con l'errore, quindi questo impatta solo quella funzione.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

18/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Do you want to use VulDB in your project?

Use the official API to access entries easily!