Po šiestich mesiacoch vývoja bol vydaný nový release systémovej knižnice GNU C Library 2.42 (glibc), ktorá plne spĺňa požiadavky štandardov ISO C23 a POSIX.1-2024. Na vytvorení novej verzie sa podieľalo 70 vývojárov.
Medzi zavedenými v Glibc 2.42 vylepšeniami patrí:
- Funkcia pthread_create získala podporu pre ľahké strážne stránky na ochranu zásobníka (stack guard page), ktorých použitie spôsobuje výnimku a núdzové ukončenie procesu (SIGSEGV). Implementácia vychádza z nedávno pridaného flagu MADV_GUARD_INSTALL v systémovom volaní madvise, ktoré je podporované od verzie jadra Linux 6.13. V porovnaní s mapovaním v režime PROT_NONE strážne stránky umožňujú efektívnejšie blokovanie vykonávania kódu mimo vyhradenej oblasti pamäte, pretože ich vytvorenie nevyžaduje pridelenie novej oblasti virtuálnej pamäte.
- Do hlavičkového súboru math.h boli pridané nové funkcie na exponentáciu a výpočty koreňov compoundn, pown a powr, rootn a rsqrt, definované v štandarde ISO C23. Varianty funkcií sú implementované pre typy float, double, long double, _FloatN a _FloatNx, ako aj pre generický typ z tgmath.h.
- Na platforme Linux bola implementovaná funkcia pthread_gettid_np, ktorá, rovnako ako funkcia gettid(), vracia jedinečný identifikátor vlákna, avšak sa líši rozšírenou kontrolou chýb (v prípade nejasného správania sa proces ukončí).
- Pridané sú funkcie na výpočet absolútnych hodnôt pre nefsignované typy: uabs, ulabs, ullabs a uimaxabs. Tieto funkcie budú súčasťou budúceho štandardu C.
- Na platforme Linux v programovom rozhraní termios.h bola implementovaná podpora pre ľubovoľné hodnoty prenosovej rýchlosti. Typ speed_t bol predefinovaný a teraz zodpovedá typu „unsigned int“, ako v jadre Linux.
- Do lokálneho pre vlákna cache (tcache), používaného vo funkcii malloc, bola pridaná podpora pre cachovanie veľkých blokov pamäte. Maximálna veľkosť bloku môže byť predefinovaná prostredníctvom nastavenia glibc.malloc.tcache_max, ktoré môže prijímať hodnoty až do 4194304. Práca cache pre malé bloky bola zrýchlená.
- Do konfiguračného skriptu configure bola pridaná možnosť „—enable-sframe“, ktorá aktivuje podporu formátu SFrame, používaného na prezentáciu informácií o trasovaní zásobníka a podporovaného funkciou backtrace. Na používanie SFrame je potrebná minimálne verzia binutils 2.45.
- Z projektu CORE-MATH boli prenesené optimalizované varianty matematických funkcií acospif, asinpif, atanpif, atan2pif, cospif, sinpif a tanpif.
- Testovací súbor bol výrazne rozšírený, pričom teraz pokrýva fungovanie rôznych variantov rodín funkcií printf a scanf.
- Bol pridaný kód na identifikáciu procesorov Intel založených na mikroarchitektúre Arrow Lake, Panther Lake, Clearwater Forest a Diamond Rapids.
- Pridaná podpora pre platformu z17 (nová generácia mainframov IBM Z/S390).
- Do nastavenia glibc.rtld.execstack bola pridaná podpora režimu kompatibility pre aplikácie, ktoré vyžadujú spustiteľný zásobník prostredníctvom dynamicky načítaných knižníc.
- Hlavičkový súbor termio.h a definícia štruktúry termio boli odstránené z sys/ioctl.h. Programové rozhranie termio.h bolo označené za zastarané už v POSIX.1 (rok 1988) a nahradené termios.h.
- Na zostavenie Glibc sú teraz potrebné minimálne verzie GCC 12.1 a GNU Binutils 2.39.
- Boli odstránené zraniteľnosti:
- CVE-2025-0395 — pretečenie zásobníka pri vykonávaní funkcie assert(). Pretečenie nastáva pri určení príliš dlhého názvu programu (argv[0]). Probléma sa považuje za nebezpečnú, pretože mimo rozsahu zásobníka sa zapisuje 4 bajty, ktorých obsah nemôže útočník ovládať. Zaujímavé je samotné vystúpenie zraniteľnosti vo funkciách ladenia, vyplývajúce z chyby pri výpise názvu aktuálnej aplikácie.
- CVE-2025-5702, CVE-2025-5745 — zraniteľnosti v implementácii funkcií strcmp a strncmp pre procesory Power10, ktoré vedú k zlyhaniu pri ukladaní a obnove vektorových registrov v20-v31, ktoré by mali byť uložené medzi volaniami funkcií. Táto zraniteľnosť môže byť využitá na prepísanie alebo určenie obsahu údajov registrov, použitých ďalšou funkciou.
- CVE-2025-8058 — zraniteľnosť vo funkcii regcomp, ktorá vedie k dvojitému oslobodeniu pamäte (double-free).
Dodatkovo môžeme spomenúť vydanie súpravy systémových utilít GNU Binutils 2.45, ktorá obsahuje také programy ako GNU linker, GNU assembler, nm, objdump, strings, strip.
V nové verzi Binutils:
- V GNU assemberi:
- Pridaná podpora pre posledné rozšírenia pre architektúry RISC-V, LoongArch a AArch64. Pre x86 bola pridaná podpora inštrukcií XMODX, implementovaných v procesoroch Zhaoxin PadLock. Pre RISC-V bola pridaná podpora inštrukcií 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 a xmipslsp v1.0.
- Zabezpečená kompatibilita generovania údajov vo formáte SFrame so špecifikáciou SFrame V2. Pridaná podpora generovania informácií o trasovaní zásobníka (.sframe) z direktív CFI na 64-bitových systémoch s390 (s390x).
- Pridaná podpora direktív .errif a .warnif na výstup diagnostických správ pri splnení určitých podmienok.
- V linker-i v možnosti „—stats“ bola implementovaná podpora voliteľného argumentu, cez ktorý je možné zadať názov súboru na uloženie informácií o spotrebe zdrojov v rôznych fázach linkovania. Názov súboru je tiež možné zadať cez premennú prostredia LD_STATS. Pre systémy RISC-V bol linker obohatený o podporu nových formátov PLT (Procedure Linkage Table).
- Implementované rôzne vylepšenia týkajúce sa podpory formátu SFrame. Funkcie na prácu so SFrame boli presunuté do verzionovanej knižnice libsframe.so.2.
- V disassembléri a utilite readelf bola rozšírená podpora architektúry RISC-V.
Zdroj: opennet.ru
