Glibc 2.38 lançado com as novas funções strlcpy e strlcat, e mais

E foi lançado Glibc 2.38 com as novas funções strlcpy e strlcat, e mais. Confira as novidades dessa importante atualização.

Glibc é uma biblioteca GNU C, comumente conhecida como glibc, é a biblioteca de tempo de execução padrão da linguagem GNU C.

Nos sistemas em que é usada, essa biblioteca C, que fornece e define chamadas de sistema e outras funções básicas, é usada por quase todos os programas.

Agora, após seis meses de desenvolvimento, foi anunciado o lançamento da nova versão do Glibc 2.38, uma versão na qual várias alterações foram feitas, funções obsoletas foram declaradas e removidas, melhorias de segurança foram integradas e muito mais.

Novidades da Glibc 2.38

Glibc 2.38 lançado com as novas funções strlcpy e strlcat, e mais
Glibc 2.38 lançado com as novas funções strlcpy e strlcat, e mais

Nesta nova versão da Glibc 2.38, uma de suas principais novidades que se destaca é que foram adicionadas as novas funções strlcpy e strlcat, que são alternativas às funções strncpy e strncat, que contém proteção contra estouro de buffer e definem obrigatoriamente a string final para um byte nulo.

A implementação das funções foi feita desde o OpenBSD e espera-se que essas funções sejam incluídas no padrão POSIX no futuro.

Outra novidade que se destaca nesta nova versão, quando as funcionalidades C2X estão habilitadas e o argumento base é 0 ou 2, nos parâmetros de entrada das diferentes funções, permitem a utilização dos prefixos 0b e 0B para definir valores binários, por especificando o modo de formatação através do “%i”.

Independentemente de habilitar o padrão C2X, essas funções também oferecem suporte a uma opção de formato “%b” separada para números binários.

Note-se também que uma nova opção de configuração, “--enable-fortify-source“, agora pode ser usada para compilar Glibc com “_FORTIFY_SOURCE”, para detectar possíveis estouros de buffer durante a execução de funções de string definidas no arquivo header string. h.

Além disso, as funções da família Printf agora suportam os modificadores de comprimento do formato “wN” para argumentos do tipo intN_t, int_leastN_t, uintN_t e uint_leastN_t e os modificadores de comprimento “wfN” para argumentos do tipo int_fastN_t ou uint_fastN_t, como especificado no rascunho ISO C2X.

Corrigida a vulnerabilidade CVE-2023-25139, que causava um estouro de buffer nas funções da família printf ao gravar no buffer representações de sequência de números com separadores de milhares, se o tamanho do buffer for calculado sem delimitadores (por exemplo, a saída 1.234.567 resultará em um erro de 2- estouro de bytes).

Por outro lado, menciona-se que para a arquitetura AArch64 foi adicionada a compatibilidade com a biblioteca de matemática vetorial “libmvec”, que requer a versão GCC >= 10.1.0.

Ele pode ser desativado via --disable-mathvec, no entanto, essa não é uma configuração suportada, pois altera a ABI. Os nomes dos símbolos seguem a ABI do vetor AArch64, são declarados em math.h e devem ser chamados manualmente neste ponto.

Em relação às funções que foram obsoletas e removidas nesta nova versão, é mencionado, por exemplo, que “ustat” não está mais disponível para binários recém-vinculados e os cabeçalhos e foram removidos.

Por padrão, libcrypt não é mais compilado e agora é recomendado usar a opção --enable-crypt para compilar libcrypt. É provável que libcrypt seja removido em uma versão futura, portanto, é recomendável que os aplicativos sejam movidos para uma alternativa como libxcrypt.

Das outras alterações destacam-se:

Para saber mais sobre essa versão da Glibc 2.38, acesse a nota de lançamento.

  • Adicionada configuração glibc.pthread.stack_hugetlb para desabilitar THP (Transparent Huge Pages) para alocação de pilha durante pthread_create.
  • Adicionado suporte para x86_64 rodando no Hurd. Esta porta requer pelo menos binutils 2.40 e GCC 13.
  • Removidas as opções “ –disable-experimental-malloc” e “–enable-tunables” (a configuração interna agora está sempre ativada).
  • As macros C2X PRIb*, PRIB* e SCNb* foram adicionadas ao cabeçalho <inttypes.h>.
  • No kernel do Linux para a arquitetura hppa/parisc, algumas das constantes MADV_XXX foram alteradas para terem os mesmos valores das outras arquiteturas.

Como instalar ou atualizar Glibc 2.38

A Glibc é instalada por padrão nas distribuições Linux, portanto, para instalar a versão mais recente dela, basta manter seu sistema atualizado.

Sobre o Edivaldo Brito

Edivaldo Brito é analista de sistemas, gestor de TI, blogueiro e também um grande fã de sistemas operacionais, banco de dados, software livre, redes, programação, dispositivos móveis e tudo mais que envolve tecnologia.