Versión de la biblioteca del sistema Glibc 2.35

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

Algunas de las mejoras implementadas en Glibc 2.35 incluyen:

  • Se agregó soporte para la configuración regional "C.UTF-8", que incluye reglas de intercalación para todos los códigos Unicode, pero para ahorrar espacio se limita al uso de rangos ASCII en las funciones fnmatch, regexec y regcomp. La configuración regional es de aproximadamente 400 KB, de los cuales 346 KB son datos LC_CTYPE para Unicode y requiere una instalación separada (no integrada en Glibc).
  • 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 14.0.0.
  • EN Y Se implementan funciones y macros que redondean el resultado a un tipo más estrecho: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN y fMxfmafNx. Las funciones se describen en las especificaciones TS 18661-1:2014, TS 18661-3:2015 y se agregan al borrador del futuro estándar ISO C2X C.
  • EN Y funciones y macros implementadas para encontrar el mínimo y máximo de números de coma flotante con los tipos float, long double, _FloatN y _FloatNx, descritas en la especificación IEEE 754-2019 y agregadas al borrador del futuro estándar ISO C2X C: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • EN Se agregaron constantes para números de punto flotante de precisión simple: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f y M_SQRT1_2f.
  • Para funciones exp10 en el archivo de encabezado Se agregaron macros correspondientes que no están vinculadas a tipos específicos.
  • EN Se agregó la macro _PRINTF_NAN_LEN_MAX propuesta en el borrador del estándar ISO C2X.
  • Se agregaron especificadores de formato "%b" y "%B" a la familia de funciones printf para imprimir números enteros en representación binaria.
  • El sistema de enlace dinámico implementa un nuevo algoritmo de clasificación, DSO, que utiliza búsqueda en profundidad (DFS) para abordar problemas de rendimiento con dependencias de bucle. Para seleccionar el algoritmo de clasificación DSO, se propone el parámetro glibc.rtld.dynamic_sort, que se puede establecer en "1" para volver al algoritmo anterior.
  • La ABI ha agregado soporte para una nueva función '__memcmpeq', utilizada por los compiladores para optimizar el uso de 'memcmp' si el valor devuelto por esta función se usa solo para verificar el estado de finalización de una operación.
  • Se agregó soporte para registrar subprocesos automáticamente usando la llamada al sistema rseq (secuencias reiniciables) proporcionada desde el kernel de Linux 4.18. La llamada al sistema rseq le permite organizar la ejecución continua de un grupo de instrucciones que no se interrumpe y confirma el resultado con la última instrucción del grupo. Básicamente, proporciona un medio para la ejecución atómica muy rápida de operaciones que, si son interrumpidas por otro subproceso, se limpian y se vuelven a intentar.
  • Se agregó el enlace simbólico /usr/bin/ld.so.
  • Se proporciona el ensamblaje predeterminado de todos los archivos ejecutables de programas integrados y el conjunto de prueba en modo PIE (ejecutable independiente de la posición). Para deshabilitar este comportamiento, se proporciona la opción “--disable-default-pie”.
  • Para Linux, se agregó una configuración glibc.malloc.hugetlb para permitir que la implementación de malloc se cambie para usar la llamada al sistema madvise con el indicador MADV_HUGEPAGE para mmap y sbrk, o para usar directamente páginas de memoria grandes especificando el indicador MAP_HUGETLB en mmap. llamadas. En el primer caso, se pueden lograr mejoras de rendimiento si se utilizan páginas enormes transparentes en modo madvise, y en el segundo caso, se proporciona la posibilidad de utilizar páginas enormes reservadas por el sistema.
  • Se agregó la función _dl_find_object que se puede usar para agregar información de desenredado de la pila de llamadas.
  • Se agregó soporte para la arquitectura OpenRISC (o 1k-linux-gnu) en modo de flotación suave. El puerto requiere binutils 2.35, GCC 11 y kernel de Linux 5.4.
  • Se agregó un indicador de compilación "--with-rtld-early-cflags", que se puede usar para especificar indicadores de compilación adicionales utilizados al compilar el código inicial para enlaces dinámicos.
  • Para la plataforma Linux se ha agregado la función epoll_pwait2, que se diferencia de epoll_wait al especificar un tiempo de espera con precisión de nanosegundos.
  • Se agregó la función posix_spawn_file_actions_addtcsetpgrp_np para eliminar las condiciones de carrera al configurar una terminal de control para un nuevo proceso.
  • Para aplicaciones compiladas con Glibc y GCC 12+, se implementa el modo de protección “_FORTIFY_SOURCE=3”, que detecta posibles desbordamientos del búfer al ejecutar funciones de cadena definidas en el archivo de encabezado string.h. La diferencia con el modo “_FORTIFY_SOURCE=2” se reduce a comprobaciones adicionales, que potencialmente pueden conducir a una disminución del rendimiento.
  • Se ha descontinuado el soporte para Intel MPX (Extensiones de protección de memoria), utilizado para verificar los punteros de los límites de memoria (esta tecnología no se ha generalizado y ya se ha eliminado de GCC y LLVM).
  • El mecanismo de prevínculo y sus variables de entorno asociadas LD_TRACE_PRELINKING y LD_USE_LOAD_BIAS han quedado obsoletos y se eliminarán en una versión futura.

    Vulnerabilidades solucionadas:

    • CVE-2022-23218, CVE-2022-23219: desbordamiento del búfer en las funciones svcunix_create y clnt_create, causado por copiar el contenido del parámetro de nombre de archivo en la pila sin verificar el tamaño de los datos copiados. Para aplicaciones creadas sin protección de pila y que utilizan el protocolo "Unix", la vulnerabilidad puede provocar la ejecución de código de atacante al procesar nombres de archivos muy largos.
    • CVE-2021-3998 es una vulnerabilidad en la función realpath() debido a la devolución, bajo ciertas condiciones, de un valor incorrecto que contiene datos residuales sin limpiar de la pila. Para el programa fusermount raíz SUID, la vulnerabilidad se puede utilizar para obtener información confidencial de la memoria del proceso, por ejemplo, para obtener información sobre punteros.
    • CVE-2021-3999: Desbordamiento del búfer de un solo byte en la función getcwd(). El problema se debe a un error que ha estado presente desde 1995. Para provocar un desbordamiento, simplemente llame a chdir() en el directorio "/" en un espacio de nombres de punto de montaje separado.

    Fuente: opennet.ru

Añadir un comentario