Faz pouco o lançamento da nova versão do Glibc 2.34 foi anunciado que vem após seis meses de desenvolvimento e no qual várias mudanças bastante importantes foram feitas, entre as quais a inclusão das bibliotecas libpthread, libdl, libutil e libanl, bem como várias correções de bugs, uma das quais causou bloqueios.
Para aqueles que não estão familiarizados com o Glibc, eles devem saber o que é uma biblioteca GNU C, comumente conhecido como glibc é a biblioteca GNU C em tempo de execução padrão. Em sistemas onde é usado, esta biblioteca C que fornece e define chamadas de sistema e outras funções básicas, é usado por quase todos os programas.
Principais novos recursos do Glibc 2.34
Nesta nova versão do Glibc 2.34 que é apresentada libpthread, libdl, libutil e libanl foram integrados à biblioteca principal, o uso de sua funcionalidade em aplicativos não requer mais a ligação deles com os sinalizadores -lpthread, -ldl, -lutil e -lanl.
Além disso, é mencionado que preparações foram feitas para integrar libreolv em libc, com o qual a integração irá permitir um processo de atualização glibc mais suave e simplificará a implementação em tempo de execução e as bibliotecas stub também foram fornecidas para compatibilidade com aplicativos construídos com versões anteriores do glibc.
Da parte das mudanças focadas no Linux Glibc 2.34 destaca o capacidade adicional de usar o tipo time_t de 64 bits nas configurações que tradicionalmente usava o tipo time_t 32 bits. Este recurso está disponível apenas em sistemas com kernel 5.1 e superior.
Outra mudança específica para Linux é o implementação da função execveato que permite a execução de um arquivo executável a partir de um descritor de arquivo aberto. A nova função também é usada na implementação da chamada fexecve, que não requer que o pseudo-sistema de arquivos / proc seja montado na inicialização.
A função também foi adicionada close_range () que está disponível para Linux versões 5.9 e superior e que pode ser usado para permitir que um processo feche uma gama completa de descritores de arquivo aberto ao mesmo tempo, além do parâmetro glibc.pthread.stack_cache_size é implementado, que pode ser usado para ajustar o tamanho do cache de pilha pthread.
Além disso, adicionada função _Fork, uma substituição para função garfo que atende aos requisitos de "async-signal-safe", ou seja, pode ser chamado com segurança a partir de manipuladores de sinal. Durante a execução de _Fork, um ambiente mínimo é formado, o suficiente para chamar funções em manipuladores de sinal como raise e execve, sem invocar recursos que podem alterar os bloqueios ou o estado interno.
Para a parte das vulnerabilidades corrigidas no Glibc 2.34, o seguinte é mencionado:
CVE-2021-27645: O processo nscd (daemon de cache do servidor de nomes) falhou devido a uma chamada dupla para a função livre durante o processamento de solicitações de grupo de rede especialmente criadas.
CVE-2021-33574: acesso a uma área de memória já liberada (use-after-free) na função mq_notify ao usar o tipo de notificação SIGEV_THREAD com um atributo de encadeamento para o qual uma máscara de ligação de CPU alternativa é definida. O problema pode causar um travamento, mas outras opções de ataque não são excluídas.
CVE-2021-35942: O estouro do tamanho do parâmetro na função wordexp pode travar o aplicativo.
Das outras mudanças que se destacam:
- A função timespec_getres, definida no rascunho do padrão ISO C2X, foi adicionada e a função timespec_get foi aumentada com recursos semelhantes à função POSIX clock_getres.
- No arquivo gconv-modules, apenas um conjunto mínimo de módulos principais gconv permaneceu, e o resto foi movido para um arquivo gconv-modules-extra.conf adicional localizado no diretório gconv-modules.d.
- O uso de links simbólicos para vincular objetos compartilhados instaláveis à versão Glibc foi removido. Esses objetos agora são instalados como estão (por exemplo, libc.so.6 agora é um arquivo em vez de um link para libc-2.34.so).
- No Linux, funções como shm_open e sem_open agora requerem um sistema de arquivos para a memória compartilhada montada no ponto de montagem / dev / shm.
Finalmente se você estiver interessado em saber mais sobre isso desta nova versão, você pode verificar o detalhes no link a seguir.