Kernel Linux 7.2 livra-se do strncpy
O Linux 7.2 marca o culminar de uma longa iniciativa de limpeza do código do kernel que remove completamente a função strncpy, uma função da linguagem C que há muito tempo é uma fonte recorrente de erros e vulnerabilidades. A mudança surge após seis anos de desenvolvimento e mais de 360 correcções submetidas por programadores da comunidade open source.
A função strncpy permite copiar uma quantidade específica de caracteres para uma área de memória, mas o seu comportamento pouco intuitivo em determinadas situações tornou-se uma das principais causas de bugs. Entre os problemas mais frequentes está a criação de strings sem caracter de terminação quando se tentava copiar algo maior do que o espaço do destino, que pode originar comportamentos inesperados e potenciais vulnerabilidades de segurança.
Além das preocupações com segurança, a função também era criticada pelo impacto no desempenho. O seu método de preenchimento automático da memória com zeros gerava operações desnecessárias que podiam prejudicar a eficiência do sistema. Por essa razão, os programadores do kernel têm vindo a substituí-la gradualmente por alternativas mais modernas e seguras, como a função strscpy, concebida especificamente para evitar muitos dos problemas associados ao strncpy ao disponibilizar diversas variantes mais explícitas quanto ao seu comportamento.
A remoção definitiva da strncpy é vista como um dos maiores esforços de modernização do código do kernel nos últimos anos. Ainda assim está longe de acabar totalmente com os bugs de memória, que se tornam inevitáveis ao utilizar linguagens de programação como o C/C++, que dão acesso de baixo nível e assumem que a gestão de memória seja feita correctamente pelo programador. Por isso mesmo há movimentos que defendem a transição para linguagens como o Rust, onde a gestão de memória passa a ser controlada automaticamente pela linguagem.
Também de notar que esta remoção melhora a estabilidade do kernel Linux, mas não evita que problemas de memória continuem a surgir em todos os programas e demais sistemas que continuem a usar o strncpy, que continua a ser uma função C perfeitamente válida.







































