Falhas do tipo CWE-828

2 resultados

Handler de sinal com operações não seguras para sinais

Um signal handler (função chamada quando o processo recebe um sinal do SO) executa operações que não são async-safe, ou seja, não seguras para serem interrompidas por sinais. Exemplos: malloc/free, fprintf, manipulação de locks. Isso causa race conditions, corrupção de memória ou deadlock quando o sinal interrompe o fluxo principal no meio de uma operação crítica.

Exemplo

Um processo em C usa SIGUSR1 com um handler que chama printf() para logar, enquanto a thread principal faz malloc(). Se o sinal chegar durante malloc(), o handler pode corromper estruturas internas do heap, causando crash ou exploração.

Como mitigar

Use apenas funções async-safe no handler (write(), _exit(), signal()), ou melhor ainda: sinalize uma flag volátil (volatile sig_atomic_t) e deixe o loop principal processar o trabalho. Evite pthread_mutex, malloc/free, I/O buffered, e qualquer função que toque estruturas compartilhadas.