CEVIU Logo
Voltar
Linux elimina a API strncpy após seis anos de trabalho e mais de 360 patches

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

  1. Transição do perf buffer para ring buffer no eBPF, priorizando segurança e eficiência na comunicação kernel-userspace

  2. Correção de acesso out-of-bounds no kernel Linux explorável por usuários não privilegiados com certificados malformados

  3. Divulgação da vulnerabilidade 'Copy Fail' (CVE-2026-31431), explorável via manipulação incorreta de cópias de memória

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

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Segurança da Informação
Publicado
23 de junho de 2026
Editoria
CEVIU Segurança da Informação

Quer receber mais sobre CEVIU Segurança da Informação?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser