CVE-2026-74513 in Linux
Sumário
de VulDB • 15/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
dibs: corrige use-after-free de dmb_node em attach/detach/unregister de loopback
As funções `dibs_lo_attach_dmb()`, `dibs_lo_detach_dmb()` e `dibs_lo_unregister_dmb()` procuram o `dmb_node` sob a proteção da `dmb_ht_lock`, liberam o bloqueio (lock) e só então operam na contagem de referências do nó. Nada mantém o nó vivo durante essa janela: `__dibs_lo_unregister_dmb()` remove o nó da tabela hash sob o lock de escrita e imediatamente o libera (`free`).
Portanto, um `put` final concorrente pode liberar o nó entre a busca (lookup) e a operação na contagem de referências:
CPU0 (attach) CPU1 (owner desregistra/unregisters)
read_lock_bh(&dmb_ht_lock) find dmb_node (refcnt == 1) read_unlock_bh(&dmb_ht_lock) refcount_dec_and_test() 1 -> 0 write_lock_bh(&dmb_ht_lock) hash_del(&dmb_node->list) write_unlock_bh(&dmb_ht_lock) kfree(dmb_node) refcount_inc_not_zero(&dmb_node->refcnt) <-- use-after-free
A mesma janela existe para as chamadas `refcount_dec_and_test()` nos caminhos de detach e unregister.
Resolve a condição de corrida (race condition) estruturalmente, tornando a associação à tabela hash e as transições da contagem de referências atômicas em relação uma à outra:
- Executa o `refcount_dec_and_test()` final e o `hash_del()` em uma única seção crítica do lado da escrita (`write-side`) sob `dmb_ht_lock`, tanto no caminho de unregister quanto no de detach. A liberação (freeing) do nó ainda ocorre após a liberação do lock, o que é seguro porque um nó cuja contagem de referências atingiu zero saiu da tabela hash e não pode mais ser encontrado.
- Isso estabelece a invariante de que qualquer nó encontrado na tabela hash possui pelo menos uma referência, e que a última referência só pode ser liberada sob o lock de escrita. `dibs_lo_attach_dmb()` assim pode adquirir sua referência com um simples `refcount_inc()` enquanto ainda mantém o lock de leitura; `refcount_inc_not_zero()` não é mais necessário.
`__dibs_lo_unregister_dmb()` já não toca na tabela hash e foi renomeado para `dibs_lo_free_dmb()`, conforme apropriado.
Nota: O commit cc21191b584c ("dibs: Move data path to dibs layer") moveu o código para sua localização atual; a condição de corrida (race) foi introduzida anteriormente pelo commit c3a910f2380f ("net/smc: implement DMB-merged operations of loopback-ism").
Testado SMC-D via ISM e dibs loopback.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.