Linux elimina a API strncpy após seis anos de trabalho e mais de 360 patches
Aprofundamento CEVIU
Aprofundamento
A remoção da strncpy() do kernel Linux não é só uma limpeza de código, é um desfecho técnico de uma falha estrutural que alimentou vulnerabilidades reais. A função sempre foi problemática: não garante terminação NUL se o buffer de destino for menor que a fonte, e preenche com zeros até o fim do buffer mesmo quando desnecessário, comportamento que já contribuiu para bugs de overflow, memória corrompida e acessos out-of-bounds em camadas críticas do kernel.
O timing não é coincidência: essa remoção ocorre menos de dois meses após duas falhas graves exploráveis por usuários não privilegiados, o 'Copy Fail' (CVE-2026-31431) e o acesso out-of-bounds via certificados malformados. Ambas envolvem manipulação incorreta de cópias de memória em contextos sensíveis. Substituir strncpy() por strscpy() ou memcpy_and_pad() impõe contratos explícitos: tamanho máximo, tratamento definido de truncamento e ausência de zero-filling cego. É uma mudança que reduz superfície de ataque, não por mágica, mas por exigir intenção clara do desenvolvedor.
O que mudou
Em fevereiro de 2026, o CEVIU já havia destacado a transição do perf buffer para ring buffer no eBPF como um movimento para maior segurança e eficiência na comunicação kernel-userspace. Agora, com a remoção da strncpy() no Linux 7.2, o kernel avança na mesma direção, mas em camada mais baixa e crítica: a manipulação direta de strings e buffers. Antes, a substituição era gradual e orientada por patches individuais; agora, é definitiva e obrigatória. O que era recomendação técnica virou política de código-fonte: nenhuma nova chamada a strncpy() será aceita, e todas as instâncias antigas foram eliminadas, incluindo em subsistemas que resistiram por anos, como criptografia e rede.
Por que isso importa
Para equipes de segurança corporativa, isso significa que futuras auditorias estáticas de kernel terão menos falsos positivos em cópias de string, e mais confiança em alertas reais. Para desenvolvedores de drivers ou módulos externos, é um sinal claro: usar strncpy() agora gera erro de compilação, não só warning. E para quem opera infraestrutura crítica, a mudança reduz riscos latentes em vetores de ataque já explorados, como o 'Copy Fail', que dependia exatamente da imprevisibilidade de operações de cópia mal dimensionadas.
Linha do tempo
Transição do perf buffer para ring buffer no eBPF, priorizando segurança e eficiência na comunicação kernel-userspace
Correção de acesso out-of-bounds no kernel Linux explorável por usuários não privilegiados com certificados malformados
Divulgação da vulnerabilidade 'Copy Fail' (CVE-2026-31431), explorável via manipulação incorreta de cópias de memória
Remoção definitiva da API strncpy() no Linux 7.2 após 362 commits e seis anos de substituição progressiva
Perguntas frequentes
Por que <code>strncpy()</code> era tão perigosa se existia há décadas?
Ela não garante terminação NUL se o buffer de destino for menor que a fonte, o que pode gerar leituras indefinidas depois. Também preenche o restante do buffer com zeros mesmo quando desnecessário, desperdiçando CPU e mascarando erros de dimensionamento. Em código de kernel, onde não há proteção de memória como em userspace, isso vira bug exploriável.
Qual é a diferença prática entre <code>strscpy()</code> e <code>strncpy()</code>?
strscpy() copia no máximo n-1 bytes, garante terminação NUL e retorna o número de bytes copiados (ou -E2BIG se truncado). Já strncpy() copia exatamente n bytes, preenche com zeros até o fim e não indica se houve truncamento, o que obriga o chamador a fazer checagens manuais arriscadas.
Essa mudança afeta aplicações em userspace?
Não diretamente. A remoção é só no código-fonte do kernel. Aplicações em userspace continuam podendo chamar strncpy() via libc, mas o CEVIU já alertou antes que seu uso lá também deve ser evitado em favor de strlcpy() ou snprintf(), por motivos semelhantes.
O que acontece com módulos de kernel que ainda usam <code>strncpy()</code>?
Eles deixam de compilar no Linux 7.2. O build system agora trata chamadas a strncpy() como erro, não warning. Módulos precisam ser atualizados para usar strscpy(), strscpy_pad() ou alternativas apropriadas, sob pena de incompatibilidade imediata.
Links relacionados
Fontes
- phoronix.comfonte original
- Categoria
- CEVIU Segurança da Informação
- Publicado
- 23 de junho de 2026
- Editoria
- CEVIU Segurança da Informação

