Weaknesses of type CWE-364
20 resultsCondição de corrida em manipulador de sinais
Ocorre quando um manipulador de sinais (signal handler) acessa ou modifica dados compartilhados sem sincronização adequada, enquanto a thread principal também acessa esses mesmos dados. O sistema operacional pode interromper a execução principal para executar o handler em qualquer momento, causando corrupção de dados, inconsistência de estado ou comportamento imprevisível se ambos tentam modificar a mesma variável simultaneamente.
Um servidor em C incrementa um contador global de conexões na thread principal. Quando um sinal SIGTERM chega, o manipulador de sinais tenta ler e logar esse mesmo contador para encerramento gracioso. Se o sinal interromper o incremento no meio da operação, o manipulador lê um valor corrompido ou o programa falha tentando acessar memória inválida.
Use apenas funções async-signal-safe (como write() ou exit()) dentro de manipuladores de sinais. Para dados compartilhados, set uma variável volátil simples (volatile sig_atomic_t) como flag, e deixe a thread principal verificar esse flag em pontos seguros. Considere também usar mecanismos modernos como epoll ou sigwait em threads dedicadas em vez de signal handlers tradicionales.