No kernel Linux, a seguinte vulnerabilidade foi resolvida. drm/virtio: use bloqueio ininterrupto do resv para atualizações de planos virtio_gpu_cursor_plane_update() e virtio_gpu_resource_flush() bloqueiam o dma_ resv do framebuffer BO via virtio_ gpu_ array_lock_ resv() e ignoram o seu valor de retorno. A função pode falhar com -EINTR a partir do dma_resv_lock_interruptible() (sinal durante a espera de bloqueio) ou com -ENOMEM a partir do dma_resv_reserve_fences() (alocação de fendas), deixando o bloqueio resv não mantido. O caminho da fila então caminha o array de objetos e chama dma_resv_add_fence(), que requer o bloqueio mantido; com o lockdep habilitado, este dma_resv_assert_held(): ATENÇÃO: drivers/dma-buf/dma-resv.c: 296 em dma_resv_add_fence+ 0 x 71 e/ 0 x 840 Chame o rastreamento: virtio_gpu_array_add_fence virtio_gpu_queue_ctrl_sgs virtio_gpu_queue_fenced_ctrl_buffer virtio_gpu_cursor_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_atômic drm_mode_cursor_universal drm_mode_cursor_common drm_mode_cur_ioctl drm_ioctl _x 64 _sys_ioctl.
Além do WARN, mutando a lista de cercas do dma_resv sem as corridas de bloqueio com leitores/ escritores concorrentes e pode corromper a lista. Ambos os sites de chamadas funcionam dentro do plano.atomic_ update callback, que os ajudantes atômicos DRM não permitem falhar (quando ele executar, o commit foi desligado para o espaço de usuário e não há um caminho de rollback limpo). Mover a aquisição de bloqueio para o.prepare_ fb foi rejeitado porque o escopo de bloqueio mais amplo bloqueia outros caminhos de bloqueio BO no mesmo commit atômico. Introduza virtio_gpu_lock_one_resv_uninterruptible() que usa dma_resv_lock() em vez de dma_resv_lock_interruptible(). Isto elimina o modo de falha - EINTR -- o gatilho syzbot realista -- sem estender o bloqueio através do commit. O ajudante bloqueia um único BO e rejeita os nents > 1 com - EINVAL; ambos consertam os sites bloqueando exatamente um BO.
Use- o a partir de virtio_gpu_cursor_plane_update() e virtio_gpu_resource_flush(); verifique o valor de retorno para lidar com o caso restante -ENOMEM do dma_resv_reserve_fences() liberando os objs e pulando a atualização do plano para esse quadro. Os BOs do framebuffer tocados aqui não são compartilhados com outros contextos e a contenda do bloqueio é esperada para ser breve, por isso a perda de interruptibilidade do sinal é aceitável. Outros chamadores de virtio_gpu_array_lock_resv() (os caminhos Ioctl) continuam a usar a variante interruptivel. O erro foi reportado pelo syzbot, acionado através da injeção de falhas (fail_nth) no caminho DRM_IOCTL_MODE_CURSOR, que força o ramo -ENOMEM no dma_resv_reserve_fences().
Registro de aconselhamento: GHSA- 9 Phf- m 556 - w 4 xg. Identificadores relacionados: CVE- 2026 - 64098. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 19 T 18: 31: 52.000 Z e lista a sua última modificação como 2026 - 07 - 20 T 15: 31: 59.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
Software afetado: o registro de aconselhamento não fornece um pacote normalizado ou faixa de versões. Classificação e evidência: identificadores de fraqueza CWE- 667. O registro contém 7 suporte de referências nestes tipos: AVISO, WEB.