Versión de la biblioteca del sistema Glibc 2.41

Después de seis meses de desarrollo, se lanzó la biblioteca del sistema GNU C Library (glibc) 2.41, que cumple totalmente con los requisitos de los estándares ISO C11 y POSIX.1-2017. En la creación de la nueva versión participaron 79 desarrolladores.

Algunas de las mejoras implementadas en Glibc 2.41 incluyen:

  • Para la plataforma Linux, se han agregado las nuevas funciones sched_setattr y sched_getattr, a través de las cuales puede configurar/leer los parámetros del programador de tareas. En la práctica, las funciones le permiten configurar políticas de programación de consultas como SCHED_DEADLINE, que utilizan parámetros adicionales más allá de la prioridad.
  • Se agregó soporte para la conversión de codificación in situ a la utilidad iconv (si el nombre de los archivos de entrada y salida es el mismo, iconv ahora crea automáticamente un archivo temporal y reemplaza el archivo original con él una vez completada la conversión).
  • Se agregaron funciones trigonométricas introducidas en el estándar C23 (TS 18661-4:2015) al archivo de encabezado math.h: acospi, asinpi, atan2pi, atanpi, cospi, sinpi y tanpi.
  • Se han transferido versiones optimizadas de las funciones exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f desde CORE-MATH. proyecto , atanhf, coshf, sinhf y tanhf.
  • Se agregó soporte para la extensión ARM64 GCS (Guarded Control Stack) para la protección de hardware de las direcciones de retorno de funciones y el bloqueo de exploits utilizando métodos de programación orientados al retorno (ROP - Programación orientada al retorno, un exploit se forma a partir de piezas de instrucciones de máquina ya existentes que terminan en una instrucción de retorno de control). ARM64 GCS le permite utilizar la técnica de la pila de sombra para proteger los procesos en el espacio del usuario: después de transferir el control a una función, el procesador almacena las direcciones de retorno no solo en la pila normal, sino también en una pila de sombra separada, que no se puede cambiar. directamente. Antes de que salga la función, la dirección de retorno se extrae de la pila oculta y se compara con la dirección de retorno de la pila principal. La creación de Glibc con soporte GCS requiere al menos binutils 2.44 y GCC 15.
  • Se ha trabajado mucho para mejorar la generación de código y mejorar el rendimiento de las funciones matemáticas para la arquitectura ARM64/AArch64. Implementé optimizaciones usando instrucciones vectoriales (SVE, Scalable Vector Extension) y extensiones SIMD (Neon).
  • Para sistemas con procesadores ARM64/AArch64, se ha agregado soporte para el mecanismo de claves de protección de memoria, que se utiliza para restringir el acceso a las páginas de memoria sin cambiar la tabla de páginas de memoria.
  • Para sistemas con procesadores PowerPC64, se ha agregado soporte para instrucciones extendidas para proteger contra el uso de programación orientada al retorno en exploits.
  • Se agregó un nuevo tipo de arquitectura arch_kind_hygon para procesadores chinos x86-64 Hygon basados ​​en tecnologías AMD.
  • El conjunto de pruebas glibc se ha ampliado significativamente y el número de pruebas aumentó de 5408 a 6232 en comparación con la versión anterior.
  • Se agregó la capacidad de probar compilaciones de glibc utilizando compiladores de C y C++ distintos de los utilizados para la compilación real. Por ejemplo, 'configurar TEST_CC=»gcc-6.4.1″ TEST_CXX=»g++-6.4.1″' y 'configurar TEST_CC=»clang» TEST_CXX=»clang++»'.
  • En las opciones especificadas en el archivo /etc/resolv.conf y la variable de entorno RES_OPTIONS, ahora es posible usar el prefijo “-” para borrar una opción previamente configurada con un nombre determinado. Por ejemplo, si el archivo /etc/resolv.conf está configurado en "opciones no-aaaa", ejecutar el proceso con la variable de entorno "RES_OPTIONS=-no-aaaa" eliminará la prohibición de enviar consultas DNS para obtener la AAAA. registro.
  • Se agregó soporte para la opción "error estricto" al solucionador de DNS, en el que la función getaddrinfo(), si el tipo de dirección (AF_UNSPEC) no se especifica explícitamente, intentará obtener los valores de A (IPv4) y AAAA. (IPv6) de otro servidor DNS, si falló la consulta del registro A o AAAA al primer servidor DNS. Sin especificar "error estricto" en tal situación, se devolverá la dirección obtenida como resultado de una solicitud procesada con éxito y se ignorará el valor de la solicitud fallida. Por ejemplo, si el servidor devolvió un registro "A", pero dio un error al solicitar "AAAA", getaddrinfo sin la opción "error estricto" devolverá inmediatamente solo la dirección IPv4, y con la opción "error estricto" Intentará repetir las consultas a otro servidor DNS.
  • Los datos de codificación, la información del tipo de caracteres y las tablas de transliteración se han actualizado para admitir la especificación Unicode 16.0.0.
  • Se agregó la macro "_ISOC2Y_SOURCE" para habilitar las capacidades definidas en el borrador del estándar C2Y. Estas funciones también se pueden habilitar utilizando la macro _GNU_SOURCE y mediante indicadores del compilador (“gcc -std=gnu2y”).
  • Implementé un kit de herramientas de prueba para monitorear el desempeño de varias funciones (generalmente matemáticas).
  • Se agregó la configuración glibc.rtld.execstack, a través de la cual puede deshabilitar explícitamente el uso de la pila ejecutable.
  • Se agregó soporte para ABI rseq extensible (secuencias reiniciables), que proporciona un mecanismo para la ejecución atómica rápida de operaciones (si la operación es interrumpida por otro subproceso, el estado se restablece y se intenta la ejecución nuevamente). La nueva versión permite utilizar funciones avanzadas en rseq que no estaban presentes en la ABI original, como identificadores de ejecución paralela (mm_cid, ID de concurrencia del mapa de memoria) e identificadores de nodo NUMA (node_id).
  • El port para sistemas ARC big-endian (arceb-linux-gnu) ha sido descontinuado.
  • Se ha solucionado una vulnerabilidad (CVE-2025-039) que provoca un desbordamiento del búfer al ejecutar la función afirmar(). El desbordamiento ocurre cuando el nombre del programa (argv[0]) es demasiado grande. El problema se considera benigno, ya que fuera del búfer se escriben 4 bytes cuyo contenido no puede ser controlado por el atacante. Al mismo tiempo, resulta interesante el hecho mismo de la aparición de una vulnerabilidad en las funciones de depuración, que se produce debido a un error al mostrar el nombre de la aplicación actual.

Fuente: opennet.ru

Añadir un comentario