Lansarea bibliotecilor standard C Glibc 2.43 și newlib 4.6.0

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

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