Fallos del 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 chamada novamente enquanto já está em execução. Isso causa corrupção de dados ou comportamento indefinido, porque o manipulador pode interromper a execução normal da função, e quando ambos tentam acessar o mesmo estado compartilhado, ocorre uma condição de corrida.
Um programa usa malloc() dentro de um manipulador SIGTERM para alocar memória. Se um SIGTERM chegar enquanto malloc() já está em execução na thread principal, o manipulador tenta chamar malloc() novamente, corrompendo as estruturas internas do alocador. O programa quebra ou vaza memória.
Use apenas funções async-signal-safe (como write(), exit(), signal() — consulte a man page signal-safety(7)). Evite malloc(), pthread_mutex_lock(), printf() e similares. Alternativa: simplesmente defina um flag atômico no manipulador e trate a lógica complexa no fluxo principal.