Lanzamiento de las bibliotecas estándar de C Glibc 2.43 y newlib 4.6.0

Después de seis meses de desarrollo, se lanzó la versión de la biblioteca del sistema GNU C Library 2.43 (glibc), que cumple completamente con los estándares ISO C23 y POSIX.1-2024. En la creación de esta nueva versión participaron 69 desarrolladores.

Entre las mejoras implementadas en Glibc 2.43 se pueden destacar:

  • Se añadió una opción experimental para la compilación con el compilador Clang, que actualmente está disponible solo para las plataformas aarch64-linux-gnu y x86_64-linux-gnu utilizando un runtime compatible con libgcc. Para compilar Glibc se requiere al menos la versión Clang 18.
  • Para sistemas Linux, se agregó la función mseal(), que permite a los procesos establecer un bloqueo en la modificación de ciertas partes de su espacio de direcciones.
  • Para sistemas Linux, se añadió la función openat2(), que a diferencia de openat() soporta un conjunto adicional de banderas para restringir la resolución de la ruta del archivo (prohibiendo cruce de puntos de montaje, enlaces simbólicos, enlaces mágicos (\/proc\/PID\/fd), componentes "..\/").
  • Se añadieron las funciones free_sized, free_aligned_sized, memset_explicit y memalignment, que aparecieron en el estándar C23.
  • De acuerdo con el estándar C23, la llamada a assert se define como un macro con un número variable de argumentos, que soporta expresiones con comas dentro del inicializador.
  • Según el estándar C23, las funciones bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr y wmemchr, que devuelven punteros a los arrays de entrada, se redefinen como macros que devuelven un puntero a un tipo con el calificador 'const', si el argumento de entrada es un puntero a un tipo con el calificador 'const'.
  • Se añadieron al archivo de encabezado math.h definiciones de tipos long_double_t, _Float32_t, _Float64_t y _Float128_t, que surgieron en el estándar C23.
  • Se añadieron modos opcionales para el cálculo del tiempo TIME_MONOTONIC (tiempo que aumenta continuamente, independiente de los cambios del reloj del sistema), TIME_ACTIVE y TIME_THREAD_ACTIVE (tiempo de ejecución activa del proceso o hilo) para su uso en la función timespec_get.
  • Se trasladaron del proyecto CORE-MATH versiones optimizadas de las funciones matemáticas acosh, asinh, atanh, erf, erfc, lgamma y tgamma.
  • Se añadieron implementaciones optimizadas de las funciones fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) y frexpl (intel96).
  • Se ha mejorado el rendimiento de las funciones matemáticas acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 y yn/jn, gracias a la eliminación del código de manejo de errores SVID (la llamada a la función del usuario matherr en caso de error) para las nuevas compilaciones (se han dejado en modo compat para mantener la compatibilidad con programas ya compilados).
  • En sistemas x86, se ha añadido soporte para los procesadores Intel Nova Lake y Wildcat Lake.
  • En sistemas AArch64, la función malloc habilita por defecto el soporte para páginas grandes de memoria (transparent huge pages) de 2MB (el parámetro ibc.malloc.hugetlb ahora se establece en 1). En la función clone() se ha implementado la desactivación del estado ZA (Z-Array) en CPUs que soportan la extensión SME (Scalable Matrix Extension).
  • Para sistemas AArch64 que soportan la extensión BTI (Branch Target Identification), se ha añadido la configuración glibc.cpu.aarch64_bti, que permite activar forzosamente BTI para todos los archivos ejecutables y bibliotecas. BTI bloquea las transferencias a áreas de código arbitrarias para contrarrestar la creación de gadgets en exploits que utilizan técnicas de programación orientada a la devolución.
  • En sistemas AArch64 que soportan una de las extensiones para la protección de bifurcación (Branch Target Identification o Guarded Control Stack), se permite el uso de la variable de entorno "LD_DEBUG=security" para que el enlazador muestre advertencias al cargar archivos ejecutables y bibliotecas que no soportan estas extensiones.
  • Para sistemas AArch64 se han añadido versiones vectoriales de las funciones exp2m1, exp10m1, log10p1, log2p1 y rsqrt.
  • Para la arquitectura RISC-V se ha añadido una implementación optimizada de la función memset que utiliza la extensión RVV (RISC-V Vector).
  • En el conjunto de pruebas, se ha ampliado significativamente la verificación de la multihilos y de las funciones scanf, strerror y strsignal.
  • Los datos de codificación, la información sobre los tipos de caracteres y las tablas de transliteración se han actualizado para soportar la especificación Unicode 17.0.0.
  • En la implementación de la funcionalidad LD_PROFILE, se ha dejado de utilizar el directorio por defecto (/var/tmp) para registrar los datos de perfilado. Para conservar estos datos, ahora es necesario definir explícitamente un directorio a través de la variable de entorno LD_PROFILE_OUTPUT.
  • Se han corregido vulnerabilidades:
    • CVE-2026-0861 — desbordamiento entero en la función memalign, que conduce a la corrupción del montón.
    • CVE-2026-0915 — fuga de contenido de pila en las funciones getnetbyaddr y getnetbyaddr_r.
    • CVE-2025-15281 — retorno de memoria no inicializada que puede contener datos residuales al utilizar la función wordexp con los parámetros WRDE_REUSE y WRDE_APPEND.

Además, después de un año de desarrollo, el proyecto Cygwin publicó la versión de la biblioteca estándar de C newlib 4.6.0, desarrollada por ingenieros de Red Hat. La biblioteca está diseñada para proporcionar una implementación compacta de la biblioteca estándar de C (libc) adecuada para su uso en sistemas embebidos con un pequeño volumen de almacenamiento permanente y memoria RAM. El código del proyecto está escrito en C y se distribuye bajo la licencia LGPLv2.

En la nueva versión de newlib:

  • Se ha ampliado el soporte para la especificación POSIX.1-2024.
  • Se ha mejorado el rendimiento de las funciones memcpy, mempcpy y memmove.
  • Se ha añadido la opción «—enable-newlib-hw-misaligned-access».
  • Se ha optimizado la arquitectura RISC-V de las funciones de la serie mem* y str*.
  • Se ha revisado el código de manejo de localizaciones, que se ha liberado de la variable global global_locale_string a favor de variables individuales locale_string para cada objeto de localización con el tipo locale_t.
  • Se ha añadido soporte para la nueva plataforma m68k-atari-elf.
  • Se ha trasladado el código strtorQ.c de la biblioteca gdtoa de FreeBSD, que se utiliza para implementar el soporte del tipo de 128 bits «long double» en la función strtold.
  • Los datos de codificación se han actualizado a Unicode 17.0.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster