CVE-2026-89913 in Linux
Sumário
de VulDB • 16/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
KVM: arm64: vgic-v3: obter uma referência LPI em vgic_v3_save_pending_tables
A função `vgic_v3_save_pending_tables()` itera sobre `dist->lpi_xa` usando `xa_for_each()` e faz o dereferencing da estrutura `struct vgic_irq` retornada no corpo do loop sem manter uma referência na LPI.
O iterador xarray fornece apenas cobertura RCU temporária durante a busca da entrada atual. Isso não é suficiente para este corpo de loop, que lê campos de `struct vgic_irq` e realiza acessos à memória do convidado antes que a iteração seja concluída.
Um caminho concorrente pode acionar esta condição de corrida: o caminho de injeção em cache irqfd (`vgic_its_inject_cached_translation`) obtém uma referência LPI transitória via `vgic_its_check_cache()` sem manter `kvm->lock`, `vcpu->mutex`, `config_lock` ou `its_lock`. Se a descarte do ITS convidado remover o cache e as referências ITE sob `its_lock`, a referência de injeção transitória pode se tornar a final. Quando `vgic_put_irq()` a remove, a LPI é apagada de `lpi_xa` e liberada via `kfree_rcu()`. Enquanto isso, `vgic_v3_save_pending_tables()` ainda pode manter um ponteiro obsoleto obtido do iterador xarray e fazê-lo o dereferencing após o término do período de graça RCU.
Corrija isso recuperando cada LPI iterada via `vgic_get_irq()`, que obtém uma referência estável, e removendo-a com `vgic_put_irq()` em todos os caminhos. Isso corresponde ao padrão já utilizado por outros iteradores lpi_xa no código ITS do vgic.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.