Glibc 2.35 chega com melhorias, correções de bugs e muito mais

Após seis meses de desenvolvimento foi anunciado o lançamento da nova versão do Glibc 2.35 em que inclui correções de 66 desenvolvedores e das melhorias implementadas podemos descobrir que foi adicionado suporte para a localidade "C.UTF-8", que inclui collations para todos os códigos Unicode, mas está limitado ao uso de intervalos ASCII nas funções fnmatch, regexec e regcomp para salvar espaço.

A localidade é de aproximadamente 400 KB, dos quais 346 KB são dados LC_CTYPE para Unicode e devem ser instalados separadamente (não integrados ao Glibc). Dados de codificação, informações de tipo de caractere e tabelas de transliteração foram atualizados para oferecer suporte à especificação Unicode 14.0.0.

Outra mudança que se destaca é que S implementar funções e macros que arredondam o resultado para um tipo mais restrito, Além de implementar funções e macros para encontrar o mínimo e o máximo de números de ponto flutuante dos tipos float, long double, _FloatN e _FloatNx, descritos na especificação IEEE 754-2019.

para funções exp10, as macros correspondentes são adicionadas ao arquivo de cabeçalho, que não estão vinculados a tipos específicos, mais a macro _PRINTF_NAN_LEN_MAX foi adicionada a , proposto no projeto de norma ISO C2X.

O sistema de ligação dinâmica implementa um novo algoritmo de classificação DSO usando pesquisa em profundidade (DFS) para resolver problemas de desempenho ao lidar com dependências de loop. Para selecionar o algoritmo de ordenação DSO, é proposto o parâmetro glibc.rtld.dynamic_sort, que pode ser definido como "1" para retornar ao algoritmo anterior.

Além disso adicionado suporte para uma nova função '__memcmpeq' à ABI, que é usada por compiladores para otimizar o uso de `memcmp' quando o valor de retorno desta função é usado apenas para verificar o status de conclusão de uma operação.

o suporte para registro automático de threads usando a chamada de sistema rseq (sequências reinicializáveis) fornecida desde o kernel Linux 4.18. A chamada do sistema rseq permite organizar a execução contínua de um grupo de instruções que não é interrompido e confirma o resultado com a última instrução do grupo. Essencialmente, ele fornece uma facilidade para execução atômica muito rápida de operações que, se interrompidas por outro encadeamento, são limpas e repetidas.

Por outro lado, fornece compilação padrão de todos os arquivos executáveis dos programas integrados e um conjunto de testes no modo PIE (executável independente de posição).

Para desativar esse comportamento, a opção “–disable-default-pie” é fornecida, plus para Linux, adicionou uma configuração glibc.malloc.hugetlb para alterar a implementação do malloc para usar a chamada de sistema madvise com o sinalizador MADV_HUGEPAGE para mmap e sbrk, ou usar diretamente páginas de memória grande especificando o sinalizador MAP_HUGETLB em chamadas mmap.

No primeiro caso, um aumento de desempenho pode ser obtido usando Huge Pages transparentes no modo madvise e, no segundo caso, você pode usar páginas enormes reservadas pelo sistema (Huge Pages).

De referir também que algumas vulnerabilidades foram corrigidas nesta nova versão:

  • CVE-2022-23218, CVE-2022-23219: Um estouro de buffer nas funções svcunix_create e clnt_create causado pela cópia do conteúdo de um parâmetro de nome de arquivo na pilha sem verificar o tamanho dos dados copiados. Para aplicativos criados sem proteção de pilha e usando o protocolo "unix", a vulnerabilidade pode levar à execução de código mal-intencionado ao processar nomes de arquivos muito longos.
  • CVE-2021-3998: uma vulnerabilidade na função realpath() causada pelo retorno de um valor incorreto sob certas condições contendo dados residuais não limpos da pilha. Para o programa fusermount SUID-root, a vulnerabilidade pode ser usada para obter informações confidenciais da memória do processo, por exemplo, para obter informações de ponteiro.
  • CVE-2021-3999: estouro de buffer de byte único na função getcwd(). O problema é causado por um bug que existe desde 1995. Para chamar um overflow, em um namespace de ponto de montagem separado, basta chamar chdir() no diretório "/".

Finalmente Se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.