Fallos del tipo CWE-663

1 resultado

Uso de função não-reentrante em contexto concorrente

Ocorre quando código concorrente (threads, processos assíncronos) chama funções que não foram projetadas para múltiplas execuções simultâneas. Essas funções mantêm estado compartilhado (variáveis globais, buffers estáticos) sem sincronização, causando corrupção de dados, comportamento imprevisível ou crashes quando acessadas por mais de uma thread ao mesmo tempo.

Ejemplo

Uma biblioteca legacy fornece a função `parsear_xml()` que usa um buffer estático global para armazenar resultados. Quando duas threads chamam essa função simultaneamente, ambas escrevem no mesmo buffer, sobrescrevendo os dados uma da outra. A primeira thread recebe dados corrompidos ou da segunda thread, levando a bugs silenciosos ou falhas de segurança.

Cómo mitigar

Use funções reentrantes (thread-safe) da biblioteca ou reimplemente com sincronização explícita (mutexes, locks). Evite variáveis globais e buffers estáticos em funções que serão chamadas concorrentemente; prefira alocação dinâmica ou thread-local storage. Na revisão de código, identifique chamadas a funções legacy em contextos multi-thread.