Weaknesses of type CWE-479

2 results

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 — típicamente funções que acessam ou modificam estado compartilhado sem proteção. Quando um sinal interrompe a execução normal e o handler invoca essas funções, pode corromper dados, causar deadlock ou comportamento indefinido.

Example

Um programa usa malloc() dentro de um signal handler. Se o sinal interrompe a própria malloc() em execução (que está modificando a heap), o handler chama malloc() novamente, causando corrupção da estrutura de alocação de memória e crashes.

How to mitigate

Dentro de signal handlers, use apenas funções async-signal-safe (listadas em signal-safety(7)), como write(), _exit(), signal(). Se precisar fazer algo complexo, defina apenas uma flag volatile e processe a lógica pesada fora do handler, após seu retorno.