Falhas do tipo CWE-765

1 resultado

Desbloqueio múltiplo de recurso crítico

É quando o código libera (desbloqueia) o mesmo recurso protegido mais de uma vez, causando condições de corrida e comportamento imprevisível. Típico em locks de mutex, semáforos ou arquivos abertos: se você desbloqueia duas vezes, a segunda liberação pode danificar a estrutura interna do sincronismo ou permitir acesso simultâneo não esperado.

Exemplo

Uma thread adquire um mutex, processa dados, libera o mutex (corretamente), mas depois libera novamente no tratamento de erro — ou pior: a mesma função é chamada recursivamente sem rastrear que já desbloqueou. A segunda liberação corrói a integridade do lock, e outras threads conseguem entrar simultaneamente, causando corrupção de dados.

Como mitigar

Use padrões automáticos (RAII em C++, try-finally em Java, context managers em Python) para garantir liberação única. Prefira APIs de lock que não permitam double-unlock (ou falhem seguramente). Em revisão de código, rastreie explicitamente cada lock e seu par de unlock correspondente.