CVE-2026-64437 in Linux
Sumário
de VulDB • 26/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
ksmbd: corrige use-after-free de um file_lock diferido no SMB2_CLOSE seguido por SMB2_CANCEL
O commit f580d27e8928 ("ksmbd: fixa use-after-free de um file_lock diferido em duplo SMB2_CANCEL") fez com que smb2_cancel() ignorasse uma tarefa cujo estado é KSMBD_WORK_CANCELLED, para que sua cancel_fn não seja acionada uma segunda vez. No entanto, o KSMBD_WORK possui três estados (ACTIVE, CANCELLED e CLOSED), e a mesma via de liberação do produtor é alcançada também para o estado CLOSED:
SMB2_CLOSE no handle de bloqueio -> set_close_state_blocked_works() define o estado da tarefa diferida como KSMBD_WORK_CLOSED e acorda o worker smb2_lock(). O worker realiza a saída antecipada (early-exit) não-ACTIVE, executa locks_free_lock() sobre o file_lock e, porque o estado não é KSMBD_WORK_CANCELLED, segue para o branch STATUS_RANGE_NOT_LOCKED com "goto out2" -- que, assim como o branch de cancelamento, ignora release_async_work(). A tarefa permanece em conn->async_requests com uma cancel_fn ativa = smb2_remove_blocked_lock apontando para o file_lock já liberado.
Um SMB2_CANCEL subsequente pelo mesmo AsyncId então ultrapassa a guarda exclusiva para KSMBD_WORK_CANCELLED (seu estado é KSMBD_WORK_CLOSED), fazendo com que smb2_cancel() acione novamente a cancel_fn sobre o file_lock já liberado -- o mesmo use-after-free corrigido, via SMB2_CLOSE em vez de um primeiro SMB2_CANCEL:
BUG: KASAN: slab-use-after-free in __locks_delete_block __locks_delete_block locks_delete_block ksmbd_vfs_posix_lock_unblock smb2_remove_blocked_lock smb2_cancel <- 2º SMB2_CANCEL aciona cancel_fn handle_ksmbd_work Alocado por ...: locks_alloc_lock <- smb2_lock Liberado por ...: locks_free_lock <- smb2_lock (saída antecipada não-ACTIVE) ... cache file_lock_cache de tamanho 192
Reproduzido no mainline 7.1-rc7 (que já contém f580d27e8928) com KASAN por um cliente SMB autenticado; o controle duplo-SMB2_CANCEL é silencioso nesse kernel, portanto a falha pode ser atribuída ao gatilho CLOSE.
Apenas uma tarefa diferida ACTIVE pode ter sua cancel_fn acionada: ambos os estados terminais (CANCELLED e CLOSED) alcançam a saída antecipada de smb2_lock() que libera o file_lock e ignora release_async_work(). Adiciona-se uma guarda em KSMBD_WORK_ACTIVE para que qualquer trabalho não ativo seja ignorado.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.