CVE-2026-64098 in Linuxinformação

Sumário

de VulDB • 20/07/2026

No kernel do Linux, a seguinte vulnerabilidade foi corrigida:

drm/virtio: usar bloqueio resv não interrompível para atualizações de plano (plane)

virtio_gpu_cursor_plane_update() e virtio_gpu_resource_flush() bloqueiam o dma_resv do BO da framebuffer via virtio_gpu_array_lock_resv() e ignoram seu valor de retorno. A função pode falhar com -EINTR proveniente de dma_resv_lock_interruptible() (sinal durante a espera pelo bloqueio) ou com -ENOMEM proveniente de dma_resv_reserve_fences() (alocação de slot de fence), deixando o bloqueio resv sem ser mantido. O caminho da fila então percorre o array de objetos e chama dma_resv_add_fence(), que requer o bloqueio ativo; com lockdep habilitado, isso dispara dma_resv_assert_held():

WARNING: drivers/dma-buf/dma-resv.c:296 at dma_resv_add_fence+0x71e/0x840 Call Trace: virtio_gpu_array_add_fence virtio_gpu_queue_ctrl_sgs virtio_gpu_queue_fenced_ctrl_buffer virtio_gpu_cursor_plane_update drm_atomic_helper_commit_planes drm_atomic_helper_commit_tail commit_tail drm_atomic_helper_commit drm_atomic_commit drm_atomic_helper_update_plane __setplane_atomic drm_mode_cursor_universal drm_mode_cursor_common drm_mode_cursor_ioctl drm_ioctl __x64_sys_ioctl

Além do WARN, a mutação da lista de fences dma_resv sem o bloqueio gera uma condição de corrida (race condition) com leitores/escritores concorrentes e pode corromper a lista.

Ambos os pontos de chamada executam-se dentro do callback .atomic_update do plano, que as helpers atômicas DRM não permitem falhar (quando ele é executado, o commit já foi aprovado para userspace e não há caminho limpo de rollback). A mudança da aquisição do bloqueio para .prepare_fb foi rejeitada porque a escopo mais amplo do bloqueio causa deadlocks contra outros caminhos de bloqueio BO no mesmo commit atômico.

Introduz virtio_gpu_lock_one_resv_uninterruptible() que usa dma_resv_lock() em vez de dma_resv_lock_interruptible(). Isso elimina o modo de falha -EINTR -- o gatilho realista do syzbot -- sem estender a manutenção do bloqueio durante todo o commit. A helper bloqueia um único BO e rejeita nents > 1 com -EINVAL; ambos os locais de correção bloqueiam exatamente um BO.

Use-a em virtio_gpu_cursor_plane_update() e virtio_gpu_resource_flush(); verifique o valor de retorno para lidar com o caso restante de -ENOMEM proveniente de dma_resv_reserve_fences(), liberando os objs e pulando a atualização do plano para esse frame. Os BOs da framebuffer tocados aqui não são compartilhados com outros contextos e espera-se que a contenção de bloqueio seja breve, portanto, a perda da interrupibilidade por sinal é aceitável.

Outros chamadores de virtio_gpu_array_lock_resv() (caminhos ioctl) continuam usando a variante interrompível.

O bug foi relatado pelo syzbot, acionado via injeção de falha (fail_nth) no caminho DRM_IOCTL_MODE_CURSOR, que força o ramo -ENOMEM em dma_resv_reserve_fences().

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsável

Linux

Reservar

19/07/2026

Divulgação

19/07/2026

Moderação

aceite

Entrada

VDB-380195

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

baixo

Fontes

Might our Artificial Intelligence support you?

Check our Alexa App!