Después de seis meses de desarrollo, se ha publicado la versión de la biblioteca del sistema GNU C Library 2.42 (glibc), que cumple completamente con los requisitos de las normas ISO C23 y POSIX.1-2024. En la creación de esta nueva versión participaron 70 desarrolladores.
Entre las mejoras implementadas en Glibc 2.42 se destacan:
- Se ha añadido soporte para páginas de guardia livianas en la función pthread_create para proteger la pila (stack guard page), cuyo acceso genera una excepción y provoca la finalización anormal del proceso (SIGSEGV). La implementación se basa en el nuevo flag MADV_GUARD_INSTALL que ha aparecido en la llamada del sistema madvise, soportado desde el núcleo de Linux 6.13. En comparación con el mapeo en modo PROT_NONE, las páginas de guardia permiten bloquear de manera más eficiente la ejecución de código fuera del área de memoria asignada, ya que su creación no requiere reservar una nueva área de memoria virtual.
- Se han añadido y reflejado en el archivo de encabezado math.h nuevas funciones para la potenciación y cálculo de raíces: compoundn, pown y powr, rootn y rsqrt, definidos en la norma ISO C23. Se han implementado variantes de estas funciones para tipos float, double, long double, _FloatN y _FloatNx, así como para el tipo genérico de tgmath.h.
- En la plataforma Linux se ha implementado la función pthread_gettid_np, que, al igual que la función gettid(), devuelve un identificador único de hilo, pero se diferencia por contar con una verificación de errores más exhaustiva (cuando se produce un comportamiento indefinido, el proceso se termina).
- Se han añadido funciones para calcular valores absolutos que trabajan con tipos sin signo: uabs, ulabs, ullabs y uimaxabs. Estas funciones se incluirán en el futuro estándar de C.
- En la plataforma Linux, se ha implementado el soporte para valores de velocidad de transmisión arbitrarios en la interfaz de programación termios.h. El tipo speed_t ha sido redefinido y ahora corresponde al tipo 'unsigned int', como en el núcleo de Linux.
- Se ha añadido soporte para la caché de bloques de memoria grandes en la caché local para hilos (tcache), utilizada en la función malloc. El tamaño máximo del bloque puede ser redefinido mediante la configuración glibc.malloc.tcache_max, que puede aceptar valores de hasta 4194304. Se ha acelerado el funcionamiento de la caché para bloques de tamaño pequeño.
- Se ha añadido la opción "--enable-sframe" al script de configuración, activando el soporte para el formato SFrame, utilizado para representar información sobre el seguimiento de la pila y soportado por la función backtrace. Para utilizar SFrame se requiere al menos la versión binutils 2.45.
- Se han trasladado versiones optimizadas de funciones matemáticas del proyecto CORE-MATH: acospif, asinpif, atanpif, atan2pif, cospif, sinpif y tanpif.
- Se ha ampliado significativamente el conjunto de pruebas, que ahora abarca el funcionamiento de varias variantes de las funciones printf y scanf.
- Se ha añadido código para la detección de procesadores Intel basados en las microarquitecturas Arrow Lake, Panther Lake, Clearwater Forest y Diamond Rapids.
- Se ha añadido soporte para la plataforma z17 (nueva generación de mainframes IBM Z/S390).
- Se ha añadido soporte para el modo de compatibilidad en la configuración glibc.rtld.execstack para permitir programas que requieren una pila ejecutable a través de bibliotecas cargadas dinámicamente.
- Se han eliminado el archivo de encabezado termio.h y la definición de la estructura termio del sys/ioctl.h. La interfaz de programación termio.h fue declarada obsoleta ya en POSIX.1 (1988) y reemplazada por termios.h.
- Ahora se requieren al menos las versiones GCC 12.1 y GNU Binutils 2.39 para compilar Glibc.
- Se han corregido vulnerabilidades:
- CVE-2025-0395 — desbordamiento de búfer en la ejecución de la función assert(). El desbordamiento ocurre al especificar un nombre de programa demasiado largo (argv[0]). El problema se considera no peligroso, ya que fuera del búfer se escriben 4 bytes cuyo contenido no puede controlar el atacante. Sin embargo, es interesante el hecho de que hay una vulnerabilidad en las funciones de depuración debido a un error al mostrar el nombre de la aplicación actual.
- CVE-2025-5702, CVE-2025-5745 — vulnerabilidades en la implementación de las funciones strcmp y strncmp para procesadores Power10, que provocan fallos al guardar y restaurar registros vectoriales v20-v31, que deben conservarse entre llamadas de funciones. La vulnerabilidad puede ser utilizada para sobrescribir o determinar el contenido de los datos de los registros, utilizados por la función.
- CVE-2025-8058 — vulnerabilidad en la función regcomp que lleva a una doble liberación de memoria (double-free).
También se puede mencionar la versión del conjunto de utilidades del sistema GNU Binutils 2.45, que incluye programas como GNU linker, GNU assembler, nm, objdump, strings, strip.
En la nueva versión de Binutils:
- En GNU assembler:
- Se ha añadido soporte para las últimas extensiones de las arquitecturas RISC-V, LoongArch y AArch64. Para x86, se ha añadido soporte para las instrucciones XMODX implementadas en los procesadores Zhaoxin PadLock. Para RISC-V, se ha añadido soporte para las instrucciones 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 y xmipslsp v1.0.
- Se ha asegurado la compatibilidad para la generación de datos en formato SFrame con la especificación SFrame V2. Se ha añadido soporte para la generación de información de seguimiento de pila (.sframe) a partir de directivas CFI en sistemas de 64 bits s390 (s390x).
- Se ha añadido soporte para las directivas .errif y .warnif para la salida de mensajes de diagnóstico bajo ciertas condiciones.
- En el enlazador, en la opción "—stats", se ha implementado soporte para un argumento opcional que permite especificar el nombre de un archivo para guardar la información sobre el consumo de recursos en diferentes etapas del proceso de enlace. El nombre del archivo también se puede especificar a través de la variable de entorno LD_STATS. Para los sistemas RISC-V, se ha añadido soporte para nuevos formatos de PLT (Tabla de Enlace de Procedimientos) en el enlazador.
- Se han realizado diversas mejoras relacionadas con el soporte del formato SFrame. Las funciones para trabajar con SFrame se han trasladado a la biblioteca versionada libsframe.so.2.
- En el desensamblador y la utilidad readelf se ha ampliado el soporte para la arquitectura RISC-V.
Fuente: opennet.ru
