CVE-2026-89913 in Linux
Riassunto
di VulDB • 17/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
KVM: arm64: vgic-v3: acquisire un riferimento LPI in vgic_v3_save_pending_tables
La funzione `vgic_v3_save_pending_tables()` itera su `dist->lpi_xa` utilizzando `xa_for_each()` e dereferenzia la struttura restituita `struct vgic_irq` all'interno del corpo del ciclo senza mantenere un riferimento sull'LPI.
L'iteratore xarray fornisce solo una copertura RCU temporanea durante la ricerca dell'elemento corrente. Ciò non è sufficiente per il corpo di questo ciclo, che legge i campi da `struct vgic_irq` ed esegue accessi alla memoria guest prima del completamento dell'iterazione.
Un percorso concorrente può innescare questa race condition: il percorso di iniezione con cache irqfd (`vgic_its_inject_cached_translation`) ottiene un riferimento LPI transitorio tramite `vgic_its_check_cache()` senza mantenere bloccati `kvm->lock`, `vcpu->mutex`, `config_lock` o `its_lock`. Se l'ITS guest DISCARD elimina la cache e i riferimenti ITE sotto `its_lock`, il riferimento di iniezione transitorio può diventare quello finale. Quando `vgic_put_irq()` lo rilascia, l'LPI viene eliminato da `lpi_xa` e liberato tramite `kfree_rcu()`. Nel frattempo, `vgic_v3_save_pending_tables()` potrebbe ancora mantenere un puntatore obsoleto ottenuto dall'iteratore xarray e dereferenziarlo dopo il completamento del periodo di grazia RCU.
Risolvere questo problema recuperando ogni LPI iterato tramite `vgic_get_irq()`, che acquisisce un riferimento stabile, e rilasciandolo con `vgic_put_irq()` su tutti i percorsi. Questo corrisponde al pattern già utilizzato da altri iteratori lpi_xa nel codice ITS vgic.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.