Lançamento das bibliotecas padrão C Glibc 2.43 e newlib 4.6.0

Após seis meses de desenvolvimento, foi lançado o release da biblioteca de sistema GNU C Library 2.43 (glibc), que atende totalmente aos requisitos dos padrões ISO C23 e POSIX.1-2024. Participaram da criação da nova versão 69 desenvolvedores.

Entre as melhorias implementadas no Glibc 2.43, podemos destacar:

  • Adicionada a funcionalidade experimental de compilação com o compilador Clang, que está disponível apenas para as plataformas aarch64-linux-gnu e x86_64-linux-gnu ao usar um runtime compatível com libgcc. Para compilar o Glibc, é necessário pelo menos a versão 18 do Clang.
  • Para sistemas Linux, foi adicionada a função mseal(), que permite que processos coloquem bloqueios na modificação de certas partes do seu espaço de endereço.
  • Para sistemas Linux, foi adicionada a função openat2(), que, ao contrário da função openat(), suporta um conjunto de flags adicionais para restringir a resolução do caminho do arquivo (proibindo a travessia de pontos de montagem, links simbólicos, links mágicos (/proc/PID/fd) e componentes "../").
  • Adicionadas funções free_sized, free_aligned_sized, memset_explicit e memalignment, que surgiram no padrão C23.
  • De acordo com o padrão C23, a chamada assert é definida como um macro com um número variável de argumentos, que suporta expressões com vírgulas dentro do inicializador.
  • De acordo com o padrão C23, as funções bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr e wmemchr, que retornam ponteiros para matrizes de entrada, foram redefinidas como macros que retornam um ponteiro para um tipo com o qualificador "const", se o argumento de entrada for um ponteiro para um tipo com o qualificador "const".
  • No arquivo de cabeçalho math.h, foram adicionidas definições dos tipos long_double_t, _Float32_t, _Float64_t e _Float128_t, que surgiram no padrão C23.
  • Foram adicionados modos opcionais de medição de tempo TIME_MONOTONIC (tempo que aumenta continuamente, não dependendo das mudanças nos relógios do sistema), TIME_ACTIVE e TIME_THREAD_ACTIVE (tempo de execução ativa do processo ou thread) para uso na função timespec_get.
  • Do projeto CORE-MATH, foram transferidas variantes otimizadas de funções matemáticas como acosh, asinh, atanh, erf, erfc, lgamma e tgamma.
  • Foram adicionadas implementações otimizadas das funções fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) e frexpl (intel96).
  • Foi aumentada a performance das funções matemáticas acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 e yn/jn, graças à remoção do código de tratamento de erros SVID (chamada da função do usuário matherr em caso de erro) para as novas compilações (para manter a compatibilidade com os programas já compilados, eles são mantidos no modo compat).
  • Nos sistemas x86, foi adicionada a compatibilidade com os processadores Intel Nova Lake e Wildcat Lake.
  • Nos sistemas AArch64, a função malloc agora tem suporte ativado por padrão para grandes páginas de memória (transparent huge pages) de 2MB (o parâmetro ibc.malloc.hugetlb agora está definido como 1). Na função clone(), foi implementada a desativação do estado ZA (Z-Array) para CPUs com suporte à extensão SME (Scalable Matrix Extension).
  • Para sistemas AArch64 que suportam a extensão BTI (Branch Target Identification), foi adicionada a configuração glibc.cpu.aarch64_bti, que permite a ativação forçada do BTI para todos os arquivos executáveis e bibliotecas. O BTI bloqueia transições para locais de código arbitrários, ajudando a combater a criação de gadgets em explorações que utilizam técnicas de programação orientada a retorno.
  • Nos sistemas AArch64 que suportam uma das extensões de proteção de ramificações (Branch Target Identification ou Guarded Control Stack), agora é permitido o uso da variável de ambiente "LD_DEBUG=security" para emitir avisos do linker ao carregar arquivos executáveis e bibliotecas que não suportam essas extensões.
  • Para sistemas AArch64, foram adicionadas versões vetoriais das funções exp2m1, exp10m1, log10p1, log2p1 e rsqrt.
  • Para a arquitetura RISC-V, foi adicionada uma implementação otimizada da função memset, utilizando a extensão RVV (RISC-V Vector).
  • No conjunto de testes, a verificação de multithreading e das funções scanf, strerror e strsignal foi significativamente ampliada.
  • Os dados de codificações, informações sobre tipos de caracteres e tabelas de transliteração foram atualizados para suportar a especificação Unicode 17.0.0.
  • Na implementação da funcionalidade LD_PROFILE, foi descontinuado o uso do diretório padrão (/var/tmp) para gravar dados de perfilagem. Agora, é necessário especificar explicitamente um diretório para esses dados através da variável de ambiente LD_PROFILE_OUTPUT.
  • Vulnerabilidades corrigidas:
    • CVE-2026-0861 - estouro de inteiro na função memalign, levando à corrupção da heap.
    • CVE-2026-0915 - vazamento do conteúdo da pilha nas funções getnetbyaddr e getnetbyaddr_r.
    • CVE-2025-15281 — retorno de memória não inicializada, que pode conter dados residuais, ao usar a função wordexp com os parâmetros WRDE_REUSE e WRDE_APPEND.

Além disso, após um ano de desenvolvimento, o projeto Cygwin publicou a versão 4.6.0 da biblioteca padrão C newlib, desenvolvida por engenheiros da Red Hat. A biblioteca visa fornecer uma implementação compacta da biblioteca padrão C (libc), adequada para uso em sistemas embarcados com pouco espaço de armazenamento e memória RAM. O código do projeto é escrito em C e distribuído sob a licença LGPLv2.

Na nova versão da newlib:

  • Apoio à especificação POSIX.1-2024 foi expandido.
  • O desempenho das funções memcpy, mempcpy e memmove foi melhorado.
  • Adicionada a opção "--enable-newlib-hw-misaligned-access".
  • O código das funções mem* e str* da arquitetura RISC-V foi otimizado.
  • O código de processamento de localidades foi reestruturado, eliminando a variável global global_locale_string em favor de variáveis locais separadas para cada objeto de localidade do tipo locale_t.
  • Suporte adicionado à nova plataforma m68k-atari-elf.
  • O código strtorQ.c da biblioteca gdtoa do FreeBSD foi transferido, que é usado para implementar o suporte ao tipo de 128 bits "long double" na função strtold.
  • Os dados de codificação foram atualizados para Unicode 17.0.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster