După șase luni de dezvoltare, a fost publicat release-ul bibliotecii sistemului GNU C Library 2.43 (glibc), care îndeplinește complet cerințele standardelor ISO C23 și POSIX.1-2024. La crearea acestei noi versiuni au participat 69 de dezvoltatori.
Îmbunătățirile implementate în Glibc 2.43 includ:
- A fost adăugată o funcționalitate experimentală pentru compilatorul Clang, care este disponibilă momentan doar pentru platformele aarch64-linux-gnu și x86_64-linux-gnu, utilizând un runtime compatibil cu libgcc. Pentru a construi Glibc, este necesară cel puțin versiunea Clang 18.
- Pentru sistemele Linux a fost adăugată funcția mseal(), care permite proceselor să blocheze modificarea anumitor părți ale spațiului lor de adrese.
- Pentru sistemele Linux a fost adăugată funcția openat2(), care, spre deosebire de funcția openat(), suportă un set suplimentar de flaige pentru a restricționa rezolvarea căii fișierului (interzicând trecerea peste punctele de montare, linkuri simbolice, linkuri magice (/proc/PID/fd), componentele „../”).
- Au fost adăugate funcțiile free_sized, free_aligned_sized, memset_explicit și memalignment, care au apărut în standardul C23.
- Conform standardului C23, apelul assert este definit ca un macro cu un număr variabil de argumente, care suportă expresii cu virgulă în interiorul inițializatorului.
- În conformitate cu standardul C23, funcțiile bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr și wmemchr, care returnează pointeri către tablouri de intrare, sunt redefinite ca macro-uri, returnând un pointer pe un tip cu calificatorul „const”, dacă argumentul de intrare este un pointer pe un tip cu calificatorul „const”.
- În fișierul de antet math.h au fost adăugate definițiile tipurilor long_double_t, _Float32_t, _Float64_t și _Float128_t, apărute în standardul C23.
- Au fost adăugate moduri opționale de măsurare a timpului TIME_MONOTONIC (timp constant progresiv, neafectat de modificările ceasurilor sistemului), TIME_ACTIVE și TIME_THREAD_ACTIVE (timpul de execuție activ al procesului sau firului) pentru utilizarea în funcția timespec_get.
- Din proiectul CORE-MATH au fost transferate variante optimizate ale funcțiilor matematice acosh, asinh, atanh, erf, erfc, lgamma și tgamma.
- Au fost adăugate implementări optimizate ale funcțiilor fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) și frexpl (intel96).
- Performanța funcțiilor matematice acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 și yn/jn a fost îmbunătățită datorită eliminării codului de gestionare a erorilor SVID (apelul funcției utilizator matherr în caz de eroare) pentru noile builduri (pentru a menține compatibilitatea cu programele deja compilate, acestea sunt lăsate în modul compatibil).
- Pe sistemele x86, a fost adăugată suport pentru procesoarele Intel Nova Lake și Wildcat Lake.
- Pe sistemele AArch64, funcția malloc are acum activat suportul pentru paginile de memorie mari (transparent huge pages) cu dimensiunea de 2MB (parametrul ibc.malloc.hugetlb este acum setat la 1). Funcția clone() a implementat dezactivarea stării ZA (Z-Array) pe CPU-urile care suportă extensia SME (Scalable Matrix Extension).
- Pentru sistemele AArch64 care suportă extensia BTI (Branch Target Identification), a fost adăugată configurația glibc.cpu.aarch64_bti, care permite activarea forțată a BTI pentru toate fișierele executabile și bibliotecile. BTI blochează tranzițiile către zone aleatorii de cod pentru a preveni crearea gadgetelor în exploatările care folosesc tehnici de programare orientată pe returnare.
- Pe sistemele AArch64, care suportă una dintre extensiile pentru protecția ramificațiilor (Branch Target Identification sau Guarded Control Stack), utilizarea variabilei de mediu „LD_DEBUG=security” este permisă pentru a afișa avertizări la încărcarea fișierelor executabile și bibliotecilor care nu suportă aceste extensii.
- Pentru sistemele AArch64, au fost adăugate variante vectoriale ale funcțiilor exp2m1, exp10m1, log10p1, log2p1 și rsqrt.
- Pentru arhitectura RISC-V, a fost adăugată o implementare optimizată a funcției memset, care utilizează extensia RVV (RISC-V Vector).
- În setul de teste, verificarea multithreading-ului și a funcțiilor scanf, strerror și strsignal a fost extinsă semnificativ.
- Datele de codificare, informațiile despre tipurile de caractere și tabelele de transliterare au fost actualizate pentru a susține specificația Unicode 17.0.0.
- În implementarea funcționalității LD_PROFILE, utilizarea directorului implicit (/var/tmp) pentru înregistrarea datelor de profilare a fost interzisă. Pentru a menține aceste date, este necesară acum definirea explicită a unui director prin variabila de mediu LD_PROFILE_OUTPUT.
- S-au remediat vulnerabilitățile:
- CVE-2026-0861 — depășirea întregului în funcția memalign, care duce la coruperea heap-ului.
- CVE-2026-0915 — scurgerea conținutului stivei în funcțiile getnetbyaddr și getnetbyaddr_r.
- CVE-2025-15281 — revenirea memoriei neinițializate, care poate conține date reziduale, atunci când se folosește funcția wordexp cu parametrii WRDE_REUSE și WRDE_APPEND.
În plus, după un an de dezvoltare, proiectul Cygwin a publicat o versiune a bibliotecii standard C newlib 4.6.0, dezvoltată de inginerii companiei Red Hat. Biblioteca este destinată să ofere o implementare compactă a bibliotecii standard C (libc), potrivită pentru utilizarea pe sisteme încorporate cu un spațiu de stocare permanent și memorie RAM limitate. Codul proiectului este scris în limbajul C și este distribuit sub licența LGPLv2.
În noua versiune newlib:
- A fost extins suportul pentru specificația POSIX.1-2024.
- A fost îmbunătățită performanța funcțiilor memcpy, mempcpy și memmove.
- A fost adăugată opțiunea „—enable-newlib-hw-misaligned-access”.
- A fost optimizat codul arhitecturii RISC-V pentru funcțiile seriei mem* și str*.
- A fost reworked codul de procesare a localizărilor, care a scăpat de variabila globală global_locale_string în favoarea variabilelor separate locale_string pentru fiecare obiect de localizare de tip locale_t.
- A fost adăugată suportul pentru noua platformă m68k-atari-elf.
- Din biblioteca FreeBSD gdtoa a fost mutat codul strtorQ.c, care este utilizat pentru implementarea suportului tipului de 128 de biți „long double” în funcția strtold.
- Datele codificărilor au fost actualizate la Unicode 17.0.
Sursa: opennet.ro
