Lansarea bibliotecii de sistem Glibc 2.41

După șase luni de dezvoltare, a fost lansată versiunea 2.41 a bibliotecii sistemului GNU C Library (glibc), care respectă pe deplin cerințele standardelor ISO C11 și POSIX.1-2017. La crearea noului release au participat 79 de dezvoltatori.

Printre îmbunătățirile realizate în Glibc 2.41 se numără:

  • Pentru platforma Linux au fost adăugate funcțiile noi sched_setattr și sched_getattr, prin care pot fi setate/lecturate parametrii planificatorului de sarcini. În practică, funcțiile permit configurarea politicilor de planificare a cererilor, cum ar fi SCHED_DEADLINE, care utilizează parametri suplimentari, pe lângă prioritate.
  • În utilitarul iconv a fost adăugată suportul pentru conversia codării pe loc (dacă numele fișierelor de intrare și ieșire coincid, iconv acum creează automat un fișier temporar și după finalizarea conversiei îl înlocuiește pe cel original).
  • În fișierul de antet math.h au fost adăugate funcții trigonometrice apărute în standardul C23 (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi și tanpi.
  • Din proiectul CORE-MATH au fost transferate variante optimizate și cu rotunjire corectă ale funcțiilor exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf și tanhf.
  • A fost adăugat suportul pentru extensia ARM64 GCS (Guarded Control Stack) pentru protecția hardware a adreselor de întoarcere din funcții și blocarea exploit-urilor care folosesc metode de programare orientată pe întoarcere (ROP - Return-Oriented Programming, un exploit este format din bucăți deja existente de instrucțiuni mașină, care se termină cu o instrucțiune de întoarcere a controlului). ARM64 GCS permite utilizarea unei tehnici de protecție a proceselor în spațiul utilizatorului, numită stiva umbră (shadow stack) - după ce controlul este transferat funcției, adresele de întoarcere sunt salvate de procesor nu doar în stiva obișnuită, ci și într-o stivă umbră separată, care nu poate fi modificată direct. Înainte de a ieși din funcție, adresa de întoarcere este extrasă din stiva umbră și comparată cu adresa de întoarcere din stiva principală. Pentru a construi Glibc cu suport pentru GCS, este necesar să existe cel puțin versiunile binutils 2.44 și GCC 15.
  • A fost efectuat un lucru considerabil pentru îmbunătățirea generării de cod și creșterea performanței funcțiilor matematice pentru arhitectura ARM64/AArch64. Au fost implementate optimizări folosind instrucțiuni vectoriale (SVE, Scalable Vector Extension) și extensii SIMD (Neon).
  • Pentru sistemele cu procesoare ARM64/AArch64 a fost adăugată suportul pentru mecanismul Memory Protection Keys, utilizat pentru a restricționa accesul la paginile de memorie fără a modifica tabela de pagini de memorie.
  • Pentru sistemele cu procesoare PowerPC64 a fost adăugat suportul pentru instrucțiuni extinse care protejează împotriva utilizării programării orientate pe returnare în exploatări.
  • A fost adăugat un nou tip de arhitectură arch_kind_hygon pentru procesoarele x86-64 Hygon din China, bazate pe tehnologiile AMD.
  • A fost semnificativ extins setul de teste pentru glibc, numărul testelor crescând de la 5408 la 6232 comparativ cu versiunea anterioară.
  • A fost adăugată posibilitatea testării construcției glibc folosind compilatoare C și C++ diferite de cele utilizate pentru construcția efectivă. De exemplu, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' și 'configure TEST_CC="clang" TEST_CXX="clang++"'.
  • În opțiunile specificate în fișierul /etc/resolv.conf și în variabila de mediu RES_OPTIONS, a fost implementată posibilitatea de a utiliza prefixul „-” pentru a anula o opțiune anterioară cu acest nume. De exemplu, dacă în fișierul /etc/resolv.conf este specificat „options no-aaaa”, atunci la pornirea procesului cu variabila de mediu „RES_OPTIONS=-no-aaaa” va fi anulat interdicția de a trimite cereri DNS pentru a obține înregistrări AAAA.
  • În rezolvarea DNS a fost adăugată suportul pentru opțiunea „strict-error”, unde funcția getaddrinfo(), dacă nu este specificat un tip de adresă (AF_UNSPEC), va încerca să obțină valorile înregistrărilor A (IPv4) și AAAA (IPv6) de la un alt server DNS, dacă cererea de înregistrare A sau AAAA către primul server DNS a eșuat. Fără specificarea „strict-error” în această situație va fi returnată adresa obținută în urma unei cereri procesate cu succes, iar valoarea cererii eșuate va fi ignorată. De exemplu, dacă serverul a returnat înregistrarea „A”, dar a generat o eroare la cererea „AAAA”, getaddrinfo fără opțiunea „strict-error” va returna imediat doar adresa IPv4, iar cu opțiunea „strict-error” va încerca să repete cererile la un alt server DNS.
  • Datele codificărilor, informațiile despre tipurile de caractere și tabelele de transliterare au fost actualizate pentru a suporta specificația Unicode 16.0.0.
  • A fost adăugat macro-ul «_ISOC2Y_SOURCE», care permite activarea funcționalităților definite în schița standardului C2Y. Aceste funcționalități pot fi, de asemenea, activate prin macro-ul _GNU_SOURCE și prin flag-urile compilatorului („gcc -std=gnu2y”).
  • A fost implementat un instrument numit benchtest pentru monitorizarea performanței diferitelor funcții (de obicei, matematice).
  • A fost adăugată setarea glibc.rtld.execstack, prin care se poate interzice explicit utilizarea stivei executabile.
  • A fost adărat suportul pentru ABI extensibil rseq (secuențe restartabile), care oferă un mecanism pentru executarea rapidă și atomică a operațiunilor (în cazul întreruperii operației de către un alt fir, starea este resetată și se face o nouă încercare de execuție). În noua versiune a apărut posibilitatea utilizării în rseq a capacităților extinse, inexistente în ABI inițial, cum ar fi identificatorii de execuție concurentă (mm_cid, memory-map concurrency ID) și identificatorii de nod NUMA (node_id).
  • A fost oprit suportul pentru portul sistemelor ARC big-endian (arceb-linux-gnu).
  • A fost remediată vulnerabilitatea (CVE-2025-039) care ducea la overflow de buffer în timpul execuției funcției assert(). Overflow-ul apare atunci când se specifică un nume de program prea mare (argv[0]). Problema este considerată fără pericol, deoarece se scriu 4 octe în afara buffer-ului, iar conținutul acestora nu poate fi controlat de atacator. Totuși, interesant este faptul că a apărut o vulnerabilitate în funcțiile de depanare din cauza unei erori la afișarea numelui aplicației curente.

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