Fallos del tipo CWE-479

2 resultados

Uso 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.

Ejemplo

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.

Cómo mitigar

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.