Weaknesses of type CWE-832

1 result

Liberaçã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.

Example

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.

How to mitigate

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.