Weaknesses of type CWE-832
1 resultLiberação de recurso que não foi bloqueado
Ocorre quando o código tenta liberar (unlock) um recurso — como um mutex, semáforo ou lock — que nunca foi adquirido ou já foi liberado anteriormente. Isso causa comportamento imprevisível: pode gerar exceções, corrupção de estado interno ou permitir condições de corrida, já que a sincronização esperada não ocorre.
Uma thread chama pthread_mutex_unlock() sobre um mutex que outra thread nunca travou, ou o mesmo mutex é desbloqueado duas vezes em sequência. Resultado: o contador interno do lock fica inconsistente, outras threads que tentam adquiri-lo podem não bloquear corretamente, causando acesso simultâneo a dados compartilhados.
Rastreie o estado de cada lock (se foi adquirido ou não) antes de liberá-lo; use padrões como RAII (Resource Acquisition Is Initialization) em C++ ou try-finally em Java; revise cuidadosamente fluxos de controle (exceções, early returns) para garantir que todo unlock corresponde a um lock anterior.