După șase luni de dezvoltare, a fost publicat release-ul bibliotecii de sistem GNU C Library 2.42 (glibc), care respectă în totalitate cerințele standardelor ISO C23 și POSIX.1-2024. La crearea acestui nou release au contribuit 70 de dezvoltatori.
Îmbunătățirile implementate în Glibc 2.42 includ:
- Funcția pthread_create a fost extinsă cu suport pentru pagini de protecție ușoare (stack guard page) pentru protecția stivei, accesul la care generează o excepție și închiderea abruptă a procesului (SIGSEGV). Implementarea se bazează pe noul flag MADV_GUARD_INSTALL din apelul de sistem madvise, disponibil începând cu kernelul Linux 6.13. Comparativ cu mapping-ul în modul PROT_NONE, paginile de protecție permit blocarea mai eficientă a execuției codului din afara zonei de memorie alocate, deoarece crearea lor nu necesită alocarea unei noi zone de memorie virtuală.
- Au fost adăugate și reflectate în fișierul header math.h funcții noi pentru ridicarea la putere și calculul rădăcinilor compoundn, pown și powr, rootn și rsqrt, definite în standardul ISO C23. Variantele de funcții sunt implementate pentru tipurile float, double, long double, _FloatN și _FloatNx, precum și pentru tipul generic din tgmath.h.
- Pe platforma Linux a fost implementată funcția pthread_gettid_np, care, similar funcției gettid(), returnează un identificator unic de thread, dar se deosebește printr-o verificare a erorilor extinsă (în cazul unui comportament nedefinit, procesul s-a încheiat).
- Au fost adăugate funcții pentru calcularea valorilor absolute, care funcționează cu tipuri nesemnate: uabs, ulabs, ullabs și uimaxabs. Aceste funcții vor face parte din viitorul standard C.
- Pe platforma Linux, în interfața programului termios.h a fost implementat suportul pentru valori arbitrare ale vitezei de transmisie. Tipul speed_t a fost redefinit și acum corespunde tipului „unsigned int”, ca în kernelul Linux.
- În cache-ul local pentru thread-uri (tcache), utilizat în funcția malloc, a fost adăugat suportul pentru caching-ul blocurilor mari de memorie. Dimensiunea maximă a blocului poate fi redefinită prin setarea glibc.malloc.tcache_max, care poate accepta valori de până la 4194304. Performanța cache-ului a fost accelerată pentru blocurile de dimensiuni mici.
- Opțiunea „—enable-sframe” a fost adăugată la scriptul de configurare, activând suportul pentru formatul SFrame, utilizat pentru reprezentarea informațiilor despre traceback și susținut de funcția backtrace. Pentru a folosi SFrame, este necesară cel puțin versiunea binutils 2.45.
- Au fost transferate variantele optimizate ale funcțiilor matematice acospif, asinpif, atanpif, atan2pif, cospif, sinpif și tanpif din proiectul CORE-MATH.
- Setul de teste a fost semnificativ extins, acoperind acum funcționarea diferitelor variante ale familiilor de funcții printf și scanf.
- A fost adăugat cod pentru determinarea procesoarelor Intel bazate pe microarhitectura Arrow Lake, Panther Lake, Clearwater Forest și Diamond Rapids.
- A fost adăugat suport pentru platforma z17 (noua generație de mainframe-uri IBM Z/S390).
- A fost adăugată suportul pentru configurarea glibc.rtld.execstack în modul de compatibilitate pentru programele care necesită un stivă executabilă prin biblioteci încărcate dinamic.
- Fișierul header termio.h și definiția structurii termio au fost eliminate din sys/ioctl.h. Interfața programului termio.h a fost declarat învechită încă din POSIX.1 (1988) și a fost înlocuită cu termios.h.
- Pentru a construi Glibc, sunt necesare acum cel puțin versiunile GCC 12.1 și GNU Binutils 2.39.
- S-au remediat vulnerabilitățile:
- CVE-2025-0395 — depășirea buffer-ului în timpul execuției funcției assert(). Depășirea apare atunci când se specifică un nume de program prea lung (argv[0]). Problema este considerată nepericuloasă, deoarece 4 octeți sunt scriși în afara buffer-ului, iar conținutul acestora nu poate fi controlat de atacator. Totuși, este interesant faptul că a apărut o vulnerabilitate în funcțiile de depanare din cauza unei erori în afișarea numelui aplicației curente.
- CVE-2025-5702, CVE-2025-5745 — vulnerabilități în implementarea funcțiilor strcmp și strncmp pentru procesoare Power10, care duc la o eroare în salvarea și restaurarea registrelor vectoriale v20-v31, care ar trebui să fie salvate între apelurile de funcții. Vulnerabilitatea poate fi utilizată pentru a rescrie sau a determina conținutul datelor registrelor utilizate de funcția curentă.
- CVE-2025-8058 — vulnerabilitate în funcția regcomp, care duce la o eliberare dublă de memorie (double-free).
De asemenea, se remarcă lansarea setului de utilitare de sistem GNU Binutils 2.45, care include programele GNU linker, GNU assembler, nm, objdump, strings, strip.
În noua versiune a Binutils:
- În GNU assembler:
- A fost adăugat suport pentru cele mai recente extensii pentru arhitecturile RISC-V, LoongArch și AArch64. Pentru x86 a fost adăugat suport pentru instrucțiunile XMODX, implementate în procesoarele Zhaoxin PadLock. Pentru RISC-V a fost adăugat suport pentru instrucțiunile ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 și xmipslsp v1.0.
- A fost asigurată compatibilitatea generării de date în format SFrame cu specificația SFrame V2. A fost adăugat suport pentru generarea informațiilor despre urmărirea stivei (.sframe) din directivele CFI pe sistemele pe 64 de biți s390 (s390x).
- A fost adăugat suport pentru directivele .errif și .warnif pentru a emite mesaje diagnostice la activarea anumitor condiții.
- În linker, în opțiunea "—stats" a fost implementat suportul pentru un argument opțional, prin care se poate specifica numele fișierului pentru salvarea informațiilor despre consumul de resurse în diferite etape ale legării. Numele fișierului poate fi de asemenea specificat prin variabila de mediu LD_STATS. Pentru sistemele RISC-V, linker-ul a fost adăugat suport pentru noi formate PLT (Procedure Linkage Table).
- Au fost aduse diverse îmbunătățiri legate de suportul pentru formatul SFrame. Funcțiile pentru lucrul cu SFrame au fost mutate în biblioteca versiuni libsframe.so.2.
- În disassembler și utilitarul readelf, suportul pentru arhitectura RISC-V a fost extins.
Sursa: opennet.ro
