Fallos del tipo CWE-765

1 resultado

Desbloqueios múltiplos de um recurso crítico

Ocorre quando o código chama a função de desbloqueio (unlock) mais de uma vez sobre o mesmo recurso sincronizado — como mutex, semáforo ou lock — sem que ele esteja novamente bloqueado. Isso corrompe o estado interno do mecanismo de sincronização, levando a condições de corrida, deadlocks ou comportamento indefinido em ambientes multithreaded.

Ejemplo

Um thread adquire um mutex, processa dados, libera o mutex. Mas por erro de lógica (ou exceção não tratada), o mesmo código chama unlock() novamente antes de chamar lock(). Outros threads ficam desordenados e podem acessar dados simultaneamente, causando inconsistência de dados ou crash.

Cómo mitigar

Use padrões de lock automático (RAII em C++, try-finally em Java, context managers em Python) que garantem que unlock() seja chamado exatamente uma vez. Além disso, implemente testes de concorrência e use ferramentas de análise estática para detectar desbloqueios duplicados em tempo de desenvolvimento.