Versión da biblioteca do sistema Glibc 2.35

Despois de seis meses de desenvolvemento, lanzouse a biblioteca do sistema GNU C Library (glibc) 2.35, que cumpre totalmente cos requisitos dos estándares ISO C11 e POSIX.1-2017. A nova versión inclúe correccións de 66 desenvolvedores.

Algunhas das melloras implementadas en Glibc 2.35 inclúen:

  • Engadido soporte para a configuración rexional "C.UTF-8", que inclúe regras de intercalación para todos os códigos Unicode, pero para aforrar espazo limítase ao uso de rangos ASCII nas funcións fnmatch, regexec e regcomp. A configuración rexional é duns 400 KB, dos cales 346 KB son datos LC_CTYPE para Unicode, e require unha instalación separada (non integrada en Glibc).
  • Actualizáronse os datos de codificación, a información sobre os tipos de caracteres e as táboas de transliteración para admitir a especificación Unicode 14.0.0.
  • EN E impléntanse funcións e macros que redondean o resultado a un tipo máis estreito: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafN, fMfMfnfN e fMfmfNx. As funcións descríbense nas especificacións TS 18661-1:2014, TS 18661-3:2015 e engádense ao borrador da futura norma ISO C2X C.
  • EN E funcións e macros implementadas para atopar o mínimo e o máximo de números de coma flotante cos tipos float, long double, _FloatN e _FloatNx, descritos na especificación IEEE 754-2019 e engadidos ao borrador do futuro estándar ISO C2X C: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • EN Engadíronse constantes para números de coma flotante de precisión única: 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_2_SQRT1f e M_2_SQRTXNUMXf.
  • Para as funcións exp10 no ficheiro de cabeceira Engadíronse macros correspondentes que non están vinculadas a tipos específicos.
  • EN engadiu a macro _PRINTF_NAN_LEN_MAX proposta no borrador da norma ISO C2X.
  • Engadíronse especificadores de formato "%b" e "%B" á familia de funcións printf para imprimir números enteiros en representación binaria.
  • O sistema de vinculación dinámica implementa un novo algoritmo de clasificación DSO que usa a busca en profundidade (DFS) para resolver problemas de rendemento ao manexar dependencias en bucle. Para seleccionar o algoritmo de clasificación DSO, proponse o parámetro glibc.rtld.dynamic_sort, que se pode configurar en "1" para volver ao algoritmo antigo.
  • O ABI engadiu soporte para unha nova función '__memcmpeq', utilizada polos compiladores para optimizar o uso de 'memcmp' se o valor devolto por esta función só se usa para comprobar o estado de finalización dunha operación.
  • Engadido soporte para rexistrar automaticamente fíos usando a chamada do sistema rseq (secuencias reiniciables) proporcionada desde o núcleo de Linux 4.18. A chamada ao sistema rseq permítelle organizar a execución continua dun grupo de instrucións que non se interrompe e confirma o resultado pola última instrución do grupo. Esencialmente, proporciona un medio para a execución atómica moi rápida de operacións que, se son interrompidas por outro fío, son limpas e tentadas de novo.
  • Engadida a ligazón simbólica /usr/bin/ld.so.
  • Ofrécese o conxunto predeterminado de todos os ficheiros executables dos programas incorporados e o conxunto de probas en modo PIE (executable independente da posición). Para desactivar este comportamento, ofrécese a opción "--disable-default-pie".
  • Para Linux, engadiuse un axuste glibc.malloc.hugetlb para permitir que a implementación de malloc se cambie para usar a chamada ao sistema madvise coa marca MADV_HUGEPAGE para mmap e sbrk, ou para usar directamente páxinas de memoria grandes especificando a marca MAP_HUGETLB en mmap chamadas. No primeiro caso, pódense conseguir ganancias de rendemento se se usan Páxinas enormes transparentes en modo loco e, no segundo caso, ofrécese a posibilidade de utilizar Páxinas enormes reservadas polo sistema.
  • Engadiuse a función _dl_find_object que se pode usar para engadir información de desenrolo da pila de chamadas.
  • Engadido soporte para a arquitectura OpenRISC (ou 1k-linux-gnu) en modo de flotación suave. O porto require binutils 2.35, GCC 11 e kernel Linux 5.4.
  • Engadiuse unha marca de compilación "--with-rtld-early-cflags", que se pode usar para especificar marcas de compilación adicionais utilizadas ao construír o código inicial para a ligazón dinámica.
  • Para a plataforma Linux, engadiuse a función epoll_pwait2, que se diferencia de epoll_wait ao especificar un tempo de espera con precisión de nanosegundos.
  • Engadiuse a función posix_spawn_file_actions_addtcsetpgrp_np para eliminar as condicións de carreira ao configurar un terminal de control para un novo proceso.
  • Para as aplicacións compiladas con Glibc e GCC 12+, implícase o modo de protección "_FORTIFY_SOURCE=3", que detecta posibles desbordamentos do búfer ao executar funcións de cadea definidas no ficheiro de cabeceira string.h. A diferenza do modo "_FORTIFY_SOURCE=2" redúcese a verificacións adicionais, que poden provocar un rendemento reducido.
  • O soporte para Intel MPX (Extensións de protección de memoria), que se usa para comprobar os límites de memoria dos punteiros, foi descontinuado (esta tecnoloxía non se estendeu e xa foi eliminada de GCC e LLVM).
  • O mecanismo de preliga e as súas variables de ambiente asociadas LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS quedaron en desuso e eliminaranse nunha versión futura.

    Vulnerabilidades corrixidas:

    • CVE-2022-23218, CVE-2022-23219: desbordamento do búfer nas funcións svcunix_create e clnt_create, causado ao copiar o contido do parámetro nome de ficheiro na pila sen comprobar o tamaño dos datos copiados. Para aplicacións creadas sen protección de pila e que utilizan o protocolo "unix", a vulnerabilidade pode levar á execución de código do atacante ao procesar nomes de ficheiros moi longos.
    • CVE-2021-3998 é unha vulnerabilidade na función realpath() debido á devolución, en determinadas condicións, dun valor incorrecto que contén datos residuais non resoltos da pila. Para o programa SUID-root fusermount, a vulnerabilidade pódese usar para obter información confidencial da memoria do proceso, por exemplo, para obter información sobre os punteiros.
    • CVE-2021-3999: desbordamento do búfer dun só byte na función getcwd(). O problema é causado por un erro que estivo presente desde 1995. Para provocar un desbordamento, simplemente chame a chdir() no directorio "/" nun espazo de nomes de punto de montaxe separado.

    Fonte: opennet.ru

Engadir un comentario