Glibc 2.35 llega con mejoras, correcciones de errores y mas

 

Luego de seis meses de desarrollo se dio a conocer el lanzamiento de la nueva versión de Glibc 2.35 en la cual se incluye correcciones de 66 desarrolladores y de las mejoras implementadas podremos encontrar que se agregó soporte para la configuración regional «C.UTF-8», que incluye intercalaciones para todos los códigos Unicode, pero se limita al uso de rangos ASCII en las funciones fnmatch, regexec y regcomp para ahorrar espacio.

La configuración regional es de aproximadamente 400 KB, de los cuales 346 KB son datos LC_CTYPE para Unicode, y deben instalarse por separado (no integrados en Glibc). Los datos de codificación, la información del tipo de carácter y las tablas de transliteración se han actualizado para admitir la especificación Unicode 14.0.0.

Otro de los cambios que se destaca es que <math.h> y <tgmath.h> implementan funciones y macros que redondean el resultado a un tipo más estrecho, ademas de que implementan funciones y macros para encontrar el mínimo y el máximo de números de punto flotante de tipos float, long double, _FloatN y _FloatNx, descritos en la especificación IEEE 754-2019.

Para las funciones exp10, las macros correspondientes se agregan al archivo de encabezado <tgmath.h>, que no están vinculadas a tipos específicos, ademas de que se agregó la macro _PRINTF_NAN_LEN_MAX a <stdio.h>, propuesta en el borrador del estándar ISO C2X.

El sistema de vinculación dinámica implementa un nuevo algoritmo de clasificación DSO que utiliza la búsqueda en profundidad (DFS) para abordar los problemas de rendimiento al manejar dependencias en 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.

Ademas de ello se agregó el soporte para una nueva función ‘__memcmpeq’ a la ABI, que los compiladores utilizan para optimizar el uso de ‘memcmp’ cuando el valor de retorno de esta función se usa solo para verificar el estado de finalización de una operación.

Tambien se destaca el soporte para el registro automático de subprocesos utilizando la llamada del sistema rseq (secuencias reiniciables) proporcionada desde el kernel de Linux 4.18. La llamada al sistema rseq 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. Esencialmente, proporciona una facilidad 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.

Por otra parte, se proporciona la compilación por defecto de todos los archivos ejecutables de los programas incorporados y un conjunto de prueba en modo PIE (ejecutable independiente de la posición).

Para deshabilitar este comportamiento, se proporciona la opción «–disable-default-pie», ademas de que para Linux, se agregó una configuración glibc.malloc.hugetlb para cambiar la implementación de malloc para usar la llamada al sistema madvise con el indicador MADV_HUGEPAGE para mmap y sbrk, o usar directamente páginas de memoria grande especificando el indicador MAP_HUGETLB en llamadas mmap.

En el primer caso, se puede lograr un aumento en el rendimiento si se utilizan las Páginas enormes transparentes en modo madvise, y en el segundo caso, puede usar las páginas grandes reservadas por el sistema (Páginas enormes).

Tambien cabe destacar que se solucionaron algunas vulnerabilidades en esta nueva versión:

  • CVE-2022-23218, CVE-2022-23219: un desbordamiento de búfer en las funciones svcunix_create y clnt_create causado por copiar el contenido de un parámetro de nombre de archivo en la pila sin verificar el tamaño de los datos copiados. Para las aplicaciones creadas sin protección de pila y que utilizan el protocolo «unix», la vulnerabilidad podría conducir a la ejecución de código malicioso al procesar nombres de archivo muy largos.
  • CVE-2021-3998: una vulnerabilidad en la función realpath() causada por devolver un valor incorrecto bajo ciertas condiciones que contienen datos residuales sin limpiar de la pila. Para el programa SUID-root fusermount, 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 de búfer de un solo byte en la función getcwd(). El problema es causado por un error presente desde 1995. Para llamar a un desbordamiento, en un espacio de nombres de punto de montaje separado, basta con llamar a chdir() para el directorio «/».

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.


El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error pincha aquí.

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada.

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

bool(true)