CVE-2026-97478 in Linuxinformação

Sumário

de VulDB • 25/09/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

virt: acrn: Corrige use-after-free no irqfd durante o encerramento do eventfd

acrn_irqfd_deassign() e o despertar EPOLLHUP do eventfd podem sofrer uma condição de corrida (race condition) e liberar a mesma estrutura hsm_irqfd:

CPU0 CPU1 ---- ---- eventfd_release() wake_up_poll(EPOLLHUP) hsm_irqfd_wakeup() queue_work(&irqfd->shutdown) acrn_irqfd_deassign() hsm_irqfd_shutdown() list_del_init() eventfd_ctx_remove_wait_queue() eventfd_ctx_put() kfree(irqfd) hsm_irqfd_shutdown_work() container_of(work, ..., shutdown) irqfd->vm <-- use-after-free

O caminho de desatribuição (deassign path) liberou o irqfd enquanto um item de trabalho de encerramento já havia sido enfileirado pelo EPOLLHUP (ou vice-versa), permitindo que o item de trabalho ressuscitasse um ponteiro pendente através do container_of().

Mude para o modelo de ciclo de vida usado pelos irqfds do KVM:

- A desatribuição/desinicialização apenas desativa o irqfd: remove-o da lista vm->irqfds sob a irqfds_lock e enfileira o trabalho de limpeza. - hsm_irqfd_shutdown_work() torna-se o único proprietário que desconecta a entrada da fila de espera do eventfd, reduz a referência ao eventfd e libera o irqfd. - Um novo bit HSM_IRQFD_FLAG_SHUTDOWN protegido por test_and_set_bit() garante que o trabalho de limpeza seja enfileirado no máximo uma vez, independentemente de quantos dos eventos {EPOLLHUP, desatribuição, desinicialização} dispararem simultaneamente. Isso é seguro para ser chamado a partir do callback da fila de espera, que executa com wqh->lock mantido e interrupções (IRQs) desabilitadas, portanto não pode adquirir irqfds_lock.
- acrn_irqfd_deassign() faz flush em vm->irqfd_wq antes de retornar, garantindo que o eventfd esteja totalmente desconectado ao retorno. acrn_irqfd_deinit() desativa todos os irqfds, faz flush na fila de trabalho e só então a destrói, para que nenhum caminho possa enfileirar queue_work() em uma fila de trabalho já derrubada (torn-down). - acrn_irqfd_assign() agora instala a entrada da fila de espera do eventfd e publica o irqfd em vm->irqfds sob irqfds_lock, garantindo que o irqfd nunca seja visível para desatribuição/desinicialização antes que sua entrada na fila de espera esteja no lugar, e qualquer EPOLLHUP que dispare durante a janela de atribuição enfileira um trabalho de limpeza que bloqueia em irqfds_lock até que a publicação seja concluída.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsável

Linux

Reservar

24/09/2026

Divulgação

24/09/2026

Moderação

aceite

Entrada

VDB-409633

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Do you know our Splunk app?

Download it now for free!