Lansarea bibliotecii de sistem Glibc 2.35

După șase luni de dezvoltare, a fost lansată versiunea bibliotecii de sistem GNU C Library (glibc) 2.35, care respectă pe deplin cerințele standardelor ISO C11 și POSIX.1-2017. Noua versiune include corecții de la 66 de dezvoltatori.

Printre îmbunătățirile implementate în Glibc 2.35 se numără:

  • A fost adăugată suportul pentru localizarea „C.UTF-8”, care include reguli de sortare pentru toate codurile Unicode, dar pentru a economisi spațiu, este limitată la utilizarea intervalelor ASCII în funcțiile fnmatch, regexec și regcomp. Localizarea ocupă aproximativ 400 KB, din care 346 KB reprezintă datele LC_CTYPE pentru Unicode, și necesită o instalare separată (nu este inclusă în Glibc).
  • Datele de codificare, informațiile despre tipurile de caractere și tabelele de transliterare au fost actualizate pentru a susține specificația Unicode 14.0.0.
  • În <math.h> și <tgmath.h> sunt implementate funcții și macro-uri care rotunjesc rezultatul la un tip mai restrâns: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN și fMfmafNx. Funcțiile sunt descrise în specificațiile TS 18661-1:2014, TS 18661-3:2015 și sunt adăugate în proiectul viitorului standard C ISO C2X.
  • În <math.h> și <tgmath.h> sunt implementate funcții și macro-uri pentru găsirea minimului și maximumului numerelor cu virgulă mobilă de tip float, long double, _FloatN și _FloatNx, descrise în specificația IEEE 754-2019 și adăugate în proiectul viitorului standard C ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • În <math.h> au fost adăugate constante pentru numere cu virgulă mobilă de precizie simplă: 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 și M_SQRT1_2f.
  • Pentru funcțiile exp10, au fost adăugate macro-uri corespunzătoare la fișierul de antet <tgmath.h>, care nu sunt legate de tipuri specifice.
  • În <stdio.h> a fost adăugat macro-ul _PRINTF_NAN_LEN_MAX, propus în proiectul standardului ISO C2X.
  • În funcțiile din familia printf, au fost adăugați specificatori de format „%b” și „%B” pentru a afișa numere întregi în reprezentare binară.
  • În sistemul de legare dinamică a fost implementat un nou algoritm de sortare DSO, care utilizează metoda de căutare în adâncime (DFS) pentru a rezolva problemele de performanță în gestionarea dependențelor ciclice. A fost propus un parametru glibc.rtld.dynamic_sort pentru a selecta algoritmul de sortare DSO, care poate fi setat la „1” pentru a reveni la vechiul algoritm.
  • În ABI a fost adăugată suportul pentru noua funcție ' __memcmpeq', utilizată de compilatoare pentru optimizarea utilizării 'memcmp', în cazul în care valoarea returnată de această funcție este utilizată doar pentru a verifica starea finalizării operației.
  • A fost adăugat suport pentru înregistrarea automată a firelor, folosind apelul de sistem rseq (secvențe restartabile), disponibil începând cu kernelul Linux 4.18. Apelul de sistem rseq permite organizarea executării neîntrerupte a unui grup de instrucțiuni, nefiind întrerupt și confirmând rezultatul ultimei instrucțiuni din grup. Practic, se oferă un mijloc pentru executarea atomică foarte rapidă a operațiunilor, care în cazul întreruperii de către un alt fir sunt curățate și se face o nouă încercare de execuție.
  • A fost adăugat un link simbolic /usr/bin/ld.so.
  • S-a asigurat compilarea implicită a tuturor fișierelor executabile ale programelor încorporate și setului de teste în modul PIE (executabil independent de poziție). Pentru a dezactiva acest comportament, există opțiunea '—disable-default-pie'.
  • Pentru Linux a fost adăugată setarea glibc.malloc.hugetlb, care permite schimbarea implementării malloc pentru a utiliza apelul de sistem madvise cu flag-ul MADV_HUGEPAGE pentru mmap și sbrk sau utilizarea directă a paginilor mari de memorie prin specificarea flag-ului MAP_HUGETLB în apelurile mmap. În primul caz, se poate obține o îmbunătățire a performanței dacă Transparent Huge Pages sunt utilizate în modul madvise, iar în al doilea se oferă posibilitatea utilizării paginilor mari rezervate de sistem (Huge Pages).
  • A fost adăugată funcția _dl_find_object, care poate fi utilizată pentru a adăuga informații despre desfășurarea stivei de apeluri (unwind).
  • A fost adăugat suport pentru arhitectura OpenRISC (or1k-linux-gnu) în modul de procesare software a operațiunilor cu virgulă mobilă (soft-float). Pentru funcționarea portului sunt necesare binutils 2.35, GCC 11 și kernelul Linux 5.4.
  • A fost adăugat flag-ul de compilare '—with-rtld-early-cflags', prin care se pot specifica flag-uri de compilare suplimentare utilizate la compilarea codului inițial pentru legătura dinamică.
  • Pentru platforma Linux a fost adăugată funcția epoll_pwait2, care se deosebește de epoll_wait prin specificarea unui timeout cu precizie nanosecundă.
  • A fost adăugată funcția posix_spawn_file_actions_addtcsetpgrp_np, care elimină stările de concurență la stabilirea terminalului de control pentru un nou proces.
  • Pentru aplicațiile compilate cu Glibc și GCC 12+, a fost implementat modul de protecție „_FORTIFY_SOURCE=3”, care detectează posibilele depășiri de buffer în timpul executării funcțiilor de șir definite în fișierul header string.h. Diferența față de modul „_FORTIFY_SOURCE=2” constă în verificări suplimentare, care pot duce potențial la o reducere a performanței.
  • Sprijinul pentru extensiile Intel MPX (Memory Protection Extensions) a fost oprit, acestea fiind folosite pentru a verifica dacă pointerii respectă limitele domeniilor de memorie (tehnologia respectivă nu s-a impus și a fost deja eliminată din GCC și LLVM).
  • Mecanismul prelink și variabilele de mediu asociate LD_TRACE_PRELINKING și LD_USE_LOAD_BIAS au fost declarate depășite și vor fi eliminate în următoarea versiune.

    S-au remediat vulnerabilitățile:

    • CVE-2022-23218, CVE-2022-23219 — depășire a buffer-ului în funcțiile svcunix_create și clnt_create, cauzată de copierea în stivă a conținutului parametrului cu numele fișierului fără a verifica dimensiunea datelor copiate. Pentru aplicațiile compilate fără protecția stivei și care utilizează protocolul „unix”, vulnerabilitatea poate permite execuția de cod malițios la procesarea numelui de fișier foarte lung.
    • CVE-2021-3998 — vulnerabilitate în funcția realpath(), cauzată de returnarea, în anumite condiții, a unei valori incorecte, care conține date reziduale necurățate din stivă. Pentru programul SUID-root fusermount, vulnerabilitatea poate fi exploatată pentru a obține informații confidențiale din memoria procesului, de exemplu, informații despre pointeri.
    • CVE-2021-3999 — depășire a buffer-ului de un octet în funcția getcwd(). Problema este cauzată de o eroare care este prezentă din 1995. Pentru a provoca această depășire, este suficient să se efectueze un apel chdir() pentru directorul „/” într-un spațiu de nume separat de puncte de montare.

    Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster