Falhas do tipo CWE-832

1 resultado

Liberação de recurso que não estava bloqueado

Ocorre quando o código tenta liberar (unlock) um recurso de sincronização — como mutex, semáforo ou lock — que nunca foi adquirido ou já foi liberado. Isso corrompe o estado do mecanismo de sincronização, causando deadlocks, condições de corrida ou crashes em aplicações multi-thread.

Exemplo

Um thread executa unlock() em um mutex que outro thread deveria ter bloqueado, mas não fez. Ou o mesmo thread chama unlock() duas vezes no mesmo lock. O resultado é que outros threads ficam travados esperando por um lock que tecnicamente está em estado inválido.

Como mitigar

Use padrões de adquirição e liberação garantidos — como RAII (Resource Acquisition Is Initialization) em C++, try-finally em Java, ou context managers em Python. Revise toda a lógica de lock/unlock garantindo que cada unlock corresponde a um lock anterior no mesmo escopo e thread.