Versió de la biblioteca del sistema Glibc 2.35

Després de sis mesos de desenvolupament, s'ha llançat la biblioteca del sistema GNU C Library (glibc) 2.35, que compleix totalment els requisits dels estàndards ISO C11 i POSIX.1-2017. La nova versió inclou correccions de 66 desenvolupadors.

Algunes de les millores implementades a Glibc 2.35 inclouen:

  • S'ha afegit suport per a la configuració regional "C.UTF-8", que inclou regles de col·locació per a tots els codis Unicode, però per estalviar espai es limita a l'ús d'intervals ASCII a les funcions fnmatch, regexec i regcomp. La configuració regional és d'uns 400 KB, dels quals 346 KB són dades LC_CTYPE per a Unicode, i requereix una instal·lació independent (no integrada a Glibc).
  • Les dades de codificació, la informació de tipus de caràcter i les taules de transliteració s'han actualitzat per donar suport a l'especificació Unicode 14.0.0.
  • EN I s'implementen funcions i macros que arrodoneixen el resultat a un tipus més restringit: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafN, fMfMfNx i fMfMfNx. Les funcions es descriuen a les especificacions TS 18661-1:2014, TS 18661-3:2015 i s'afegeixen a l'esborrany de la futura norma ISO C2X C.
  • EN I funcions i macros implementades per trobar el mínim i màxim de nombres de coma flotant amb els tipus float, long double, _FloatN i _FloatNx, descrits a l'especificació IEEE 754-2019 i afegits a l'esborrany de la futura norma ISO C2X C: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • EN constants afegides per a números de coma flotant de precisió ú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 i M_2_SQRTXNUMXf.
  • Per a les funcions exp10 al fitxer de capçalera S'han afegit macros corresponents que no estan vinculades a tipus específics.
  • EN va afegir la macro _PRINTF_NAN_LEN_MAX proposada a l'esborrany de l'estàndard ISO C2X.
  • S'han afegit especificadors de format "%b" i "%B" a la família de funcions printf per imprimir nombres enters en representació binària.
  • El sistema d'enllaç dinàmic implementa un nou algorisme d'ordenació DSO que utilitza la cerca en profunditat (DFS) per resoldre problemes de rendiment quan es gestionen dependències en bucle. Per seleccionar l'algorisme d'ordenació DSO, es proposa el paràmetre glibc.rtld.dynamic_sort, que es pot establir a "1" per tornar a l'antic algorisme.
  • L'ABI ha afegit suport per a una nova funció '__memcmpeq', utilitzada pels compiladors per optimitzar l'ús de 'memcmp' si el valor retornat per aquesta funció només s'utilitza per comprovar l'estat de finalització d'una operació.
  • S'ha afegit suport per registrar automàticament fils mitjançant la trucada al sistema rseq (seqüències reiniciables) proporcionada des del nucli Linux 4.18. La trucada al sistema rseq permet organitzar l'execució contínua d'un grup d'instruccions que no s'interromp i confirma el resultat de l'última instrucció del grup. Essencialment, proporciona un mitjà per a l'execució atòmica molt ràpida d'operacions que, si s'interrompen per un altre fil, es netegen i es tornen a intentar.
  • S'ha afegit l'enllaç simbòlic /usr/bin/ld.so.
  • Es proporciona el conjunt per defecte de tots els fitxers executables dels programes incrustats i el conjunt de proves en mode PIE (executable independent de la posició). Per desactivar aquest comportament, es proporciona l'opció "--disable-default-pie".
  • Per a Linux, s'ha afegit una configuració glibc.malloc.hugetlb per permetre que la implementació de malloc es canviï per utilitzar la crida del sistema madvise amb el senyalador MADV_HUGEPAGE per a mmap i sbrk, o per utilitzar directament pàgines de memòria grans especificant el senyalador MAP_HUGETLB a mmap trucades. En el primer cas, es poden aconseguir guanys de rendiment si s'utilitzen Transparent Huge Pages en mode madvise, i en el segon cas, es proporciona la possibilitat d'utilitzar Huge Pages reservades pel sistema.
  • S'ha afegit la funció _dl_find_object que es pot utilitzar per afegir informació de desactivació de la pila de trucades.
  • S'ha afegit suport per a l'arquitectura OpenRISC (o 1k-linux-gnu) en mode soft-float. El port requereix binutils 2.35, GCC 11 i Linux kernel 5.4.
  • S'ha afegit un senyalador de compilació "--with-rtld-early-cflags", que es pot utilitzar per especificar indicadors de compilació addicionals utilitzats quan es construeix el codi inicial per a l'enllaç dinàmic.
  • Per a la plataforma Linux, s'ha afegit la funció epoll_pwait2, que difereix d'epoll_wait en especificar un temps d'espera amb precisió de nanosegons.
  • S'ha afegit la funció posix_spawn_file_actions_addtcsetpgrp_np per eliminar les condicions de carrera quan es configura un terminal de control per a un procés nou.
  • Per a les aplicacions compilades amb Glibc i GCC 12+, s'implementa el mode de protecció "_FORTIFY_SOURCE=3", que detecta possibles desbordaments de memòria intermèdia quan s'executen funcions de cadena definides al fitxer de capçalera string.h. La diferència amb el mode "_FORTIFY_SOURCE=2" es redueix a comprovacions addicionals, que poden provocar una disminució del rendiment.
  • El suport per a Intel MPX (extensions de protecció de memòria), que s'utilitza per comprovar els punters dels límits de memòria, s'ha interromput (aquesta tecnologia no s'ha generalitzat i ja s'ha eliminat de GCC i LLVM).
  • El mecanisme de preenllaç i les variables d'entorn associades LD_TRACE_PRELINKING i LD_USE_LOAD_BIAS han quedat obsolets i s'eliminaran en una versió futura.

    Vulnerabilitats solucionades:

    • CVE-2022-23218, CVE-2022-23219: desbordament de memòria intermèdia a les funcions svcunix_create i clnt_create, causat per copiar el contingut del paràmetre de nom de fitxer a la pila sense comprovar la mida de les dades copiades. Per a les aplicacions creades sense protecció de pila i amb el protocol "unix", la vulnerabilitat pot provocar l'execució de codi atacant quan es processen noms de fitxers molt llargs.
    • CVE-2021-3998 és una vulnerabilitat a la funció realpath() a causa del retorn, en determinades condicions, d'un valor incorrecte que conté dades residuals no netejades de la pila. Per al programa SUID-root fusermount, la vulnerabilitat es pot utilitzar per obtenir informació sensible de la memòria del procés, per exemple, per obtenir informació sobre punters.
    • CVE-2021-3999: desbordament de memòria intermèdia d'un sol byte a la funció getcwd(). El problema és causat per un error que ha estat present des de 1995. Per provocar un desbordament, simplement truqueu a chdir() al directori "/" en un espai de noms de punt de muntatge separat.

    Font: opennet.ru

Afegeix comentari