Falhas do tipo CWE-479
2 resultadosUso de função não-reentrante em manipulador de sinal
Um manipulador de sinal (signal handler) chama uma função que não é segura para ser interrompida e reinvocada. Quando um sinal chega durante a execução dessa função no código principal, o handler a chama novamente, causando corrupção de estado, deadlock ou comportamento indefinido.
Um handler de SIGTERM chama malloc() ou fprintf(), que usam locks internos. Se o sinal interromper a execução dessas funções no programa principal, o handler tenta reentrar — a tentativa de adquirir o mesmo lock novamente tranca o processo ou corrompe estruturas de memória.
Use apenas funções async-signal-safe (POSIX lista as seguras: write(), exit(), signal(), etc.). Minimize lógica no handler — prefira apenas atualizar uma flag volátil e deixar a lógica pesada fora. Teste com ferramentas que simulam condições de corrida em signals.