Após seis meses de desenvolvimento, foi lançado o release da biblioteca de sistema GNU C Library 2.42 (glibc), que atende completamente aos requisitos dos padrões ISO C23 e POSIX.1-2024. Na criação deste novo lançamento, participaram 70 desenvolvedores.
Entre as melhorias implementadas no Glibc 2.42, destacam-se:
- A função pthread_create agora inclui suporte a páginas de guarda leves para proteção da pilha (stack guard page), cujo acesso gera uma exceção e encerra o processo (SIGSEGV). A implementação é baseada na nova flag MADV_GUARD_INSTALL que surgiu na chamada de sistema madvise, suportada a partir do núcleo Linux 6.13. Em comparação com o mapeamento no modo PROT_NONE, as páginas de guarda permitem bloquear de forma mais eficaz a execução de código fora da área de memória alocada, já que sua criação não exige a alocação de uma nova área de memória virtual.
- Novas funções para potência e cálculo de raízes, compoundn, pown e powr, rootn e rsqrt, definidas no padrão ISO C23, foram adicionadas e refletidas no arquivo de cabeçalho math.h. As variantes das funções foram implementadas para os tipos float, double, long double, _FloatN e _FloatNx, além de um tipo genérico em tgmath.h.
- Na plataforma Linux, a função pthread_gettid_np foi implementada, que assim como a função gettid() retorna um identificador único de thread, mas se distingue pela verificação de erros aprimorada (quando ocorre um comportamento indefinido, o processo é encerrado).
- Foram adicionadas funções para cálculo de valores absolutos que trabalham com tipos não assinados: uabs, ulabs, ullabs e uimaxabs. Essas funções farão parte do futuro padrão C.
- Na plataforma Linux, a interface de programação termios.h implementou suporte a valores de velocidade de transmissão arbitrários. O tipo speed_t foi redefinido e agora corresponde ao tipo 'unsigned int', como no núcleo Linux.
- O cache local de thread (tcache), utilizado na função malloc, passou a suportar o cache de grandes blocos de memória. O tamanho máximo do bloco pode ser redefinido através da configuração glibc.malloc.tcache_max, que pode aceitar valores de até 4194304. O desempenho do cache para blocos pequenos foi acelerado.
- O script de configuração agora inclui a opção '--enable-sframe', que ativa o suporte ao formato SFrame, utilizado para representar informações de rastreamento de pilha e suportado pela função backtrace. Para utilizar o SFrame, é necessário ter pelo menos a versão binutils 2.45.
- Do projeto CORE-MATH foram transferidas versões otimizadas das funções matemáticas acospif, asinpif, atanpif, atan2pif, cospif, sinpif e tanpif.
- O conjunto de testes foi significativamente expandido, agora cobrindo o funcionamento de várias versões das famílias de funções printf e scanf.
- Adicionado código para identificar processadores Intel baseados na microarquitetura Arrow Lake, Panther Lake, Clearwater Forest e Diamond Rapids.
- Adicionada suporte à plataforma z17 (nova geração de mainframes IBM Z/S390).
- No ajuste glibc.rtld.execstack foi adicionada a compatibilidade para suportar programas que exigem pilha executável através de bibliotecas carregadas dinamicamente.
- O arquivo de cabeçalho termio.h e a definição da estrutura termio foram removidos de sys/ioctl.h. A interface de programação termio.h foi declarada obsoleta no POSIX.1 (1988) e substituída por termios.h.
- Para compilar o Glibc agora são necessárias no mínimo as versões GCC 12.1 e GNU Binutils 2.39.
- Vulnerabilidades corrigidas:
- CVE-2025-0395 — estouro de buffer durante a execução da função assert(). O estouro ocorre ao especificar um nome de programa excessivamente longo (argv[0]). O problema é considerado não perigoso, pois além do limite do buffer são gravados 4 bytes, cujo conteúdo não pode ser controlado pelo atacante. O interessante é o fato de que aparece em funções de depuração uma vulnerabilidade oriunda de um erro na exibição do nome do aplicativo atual.
- CVE-2025-5702, CVE-2025-5745 — vulnerabilidades na implementação das funções strcmp e strncmp para processadores Power10, levando a falhas ao salvar e restaurar os registradores vetoriais v20-v31, que devem ser salvos entre chamadas de função. A vulnerabilidade pode ser usada para sobrescrever ou determinar o conteúdo dos dados dos registradores, utilizados pela função em questão.
- CVE-2025-8058 — uma vulnerabilidade na função regcomp, levando a uma liberação dupla de memória (double-free).
Adicionalmente, podemos destacar o lançamento do conjunto de utilitários de sistema GNU Binutils 2.45, que inclui programas como GNU linker, GNU assembler, nm, objdump, strings e strip.
Na nova versão do Binutils:
- No GNU assembler:
- Adicionada suporte às últimas extensões para as arquiteturas RISC-V, LoongArch e AArch64. Para x86, foi acrescentada a suporte às instruções XMODX, implementadas nos processadores Zhaoxin PadLock. Para RISC-V foi adicionada suporte às instruções ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 e xmipslsp v1.0.
- A compatibilidade da geração de dados no formato SFrame com a especificação SFrame V2 foi assegurada. Adicionada a suporte para geração de informações de rastreamento de pilha (.sframe) a partir de diretivas CFI em sistemas de 64 bits s390 (s390x).
- Adicionada a suporte para as diretivas .errif e .warnif para a saída de mensagens de diagnóstico ao serem atendidas certas condições.
- No vinculador, na opção "—stats", foi implementado o suporte para um argumento opcional, através do qual é possível especificar o nome do arquivo para salvar informações sobre o consumo de recursos em diferentes estágios de vinculação. O nome do arquivo também pode ser especificado pela variável de ambiente LD_STATS. Para sistemas RISC-V, o vinculador recebeu suporte para novos formatos PLT (Tabela de Ligação de Procedimentos).
- Várias melhorias foram feitas em relação ao suporte do formato SFrame. Funções para trabalhar com SFrame foram extraídas para a biblioteca versionada libsframe.so.2.
- No desassemblador e na ferramenta readelf, o suporte para a arquitetura RISC-V foi ampliado.
Fonte: opennet.ru
