Po šesti měsících vývoje byl zveřejněn vydání systémové knihovny GNU C Library 2.42 (glibc), která plně vyhovuje požadavkům standardů ISO C23 a POSIX.1-2024. Na vzniku nové verze se podílelo 70 vývojářů.
Mezi vylepšeními implementovanými v Glibc 2.42 lze zmínit:
- Do funkce pthread_create byla přidána podpora lehkých strážních stránek pro ochranu zásobníku (stack guard page), jejichž přístup vyvolává výjimku a nouzové ukončení procesu (SIGSEGV). Implementace je založena na nově zavedené vlajce MADV_GUARD_INSTALL v systémovém volání madvise, která je podporována od jádra Linux 6.13. Ve srovnání s mapováním v režimu PROT_NONE strážní stránky umožňují efektivněji blokovat vykonávání kódu za vyhrazenou oblastí paměti, protože jejich vytvoření nevyžaduje alokaci nové oblasti virtuální paměti.
- Byly přidány a reflektovány v hlavičkovém souboru math.h nové funkce pro mocninu a výpočty kořenů compoundn, pown a powr, rootn a rsqrt, definované ve standardu ISO C23. Variace funkcí byly implementovány pro typy float, double, long double, _FloatN a _FloatNx, jakož i pro zobecněný typ z tgmath.h.
- Na platformě Linux byla implementována funkce pthread_gettid_np, která, stejně jako funkce gettid(), vrací unikátní identifikátor vlákna, ale liší se rozšířenou kontrolou chyb (při vzniku nejednoznačného chování se proces ukončí).
- Byly přidány funkce pro výpočet absolutních hodnot, které pracují s bezznamennými typy: uabs, ulabs, ullabs a uimaxabs. Tyto funkce se stanou součástí budoucího standardu C.
- Na platformě Linux byl v programovém rozhraní termios.h realizován podporovaný přenos libovolných hodnot rychlosti. Typ speed_t byl redefinován a nyní odpovídá typu "unsigned int", jak je tomu v jádře Linux.
- Do lokálního pro vlákna cache (tcache), používaného ve funkci malloc, byla přidána podpora cachování velkých bloků paměti. Maximální velikost bloku může být redefinována pomocí nastavení glibc.malloc.tcache_max, která může nabývat hodnot až do 4194304. Práce cache pro malé bloky byla zrychlena.
- Do sestavy skriptu configure byla přidána volba „—enable-sframe“, která zahrnuje podporu formátu SFrame používaného pro zobrazení informací o trasování zásobníku a podporovaného funkcí backtrace. Pro použití SFrame je vyžadována alespoň verze binutils 2.45.
- Z projektu CORE-MATH byly přeneseny optimalizované varianty matematických funkcí acospif, asinpif, atanpif, atan2pif, cospif, sinpif a tanpif.
- Testovací sada byla výrazně rozšířena a nyní pokrývá provoz různých variant rodin funkcí printf a scanf.
- Byl přidán kód pro detekci procesorů Intel na základě mikroarchitektury Arrow Lake, Panther Lake, Clearwater Forest a Diamond Rapids.
- Byla přidána podpora platformy z17 (nová generace mainframů IBM Z/S390).
- Do nastavení glibc.rtld.execstack byla přidána podpora režimu kompatibility pro programy vyžadující spustitelný zásobník prostřednictvím dynamicky načítaných knihoven.
- Byl odstraněn hlavičkový soubor termio.h a definice struktury termio ze sys/ioctl.h. Programové rozhraní termio.h bylo prohlášeno za zastaralé již v POSIX.1 (1988) a bylo nahrazeno termios.h.
- Pro sestavení Glibc jsou nyní vyžadovány alespoň verze GCC 12.1 a GNU Binutils 2.39.
- Opraveny zranitelnosti:
- CVE-2025-0395 — přetečení zásobníku při provádění funkce assert(). Přetečení nastává při zadání příliš dlouhého názvu programu (argv[0]). Problém se považuje za nebezpečný, neboť za hranice zásobníku jsou zapsána 4 bajty, jejichž obsah nemůže útočník kontrolovat. Zajímavý je sám fakt, že se v ladicích funkcích objevuje zranitelnost, která vzniká z chyby při výpisu aktuálního názvu aplikace.
- CVE-2025-5702, CVE-2025-5745 — zranitelnosti ve implementaci funkcí strcmp a strncmp pro procesory Power10, které vedou k selhání při ukládání a obnově vektorových registrů v20-v31, jež by měly být uloženy mezi voláními funkcí. Zranitelnost může být využita k přepsání nebo určení obsahu datových registrů, které jsou používány funkcí.
- CVE-2025-8058 — zranitelnost ve funkci regcomp, která vede k dvojitému uvolnění paměti (double-free).
Dále lze zmínit vydání sady systémových utilit GNU Binutils 2.45, která zahrnuje programy jako GNU linker, GNU assembler, nm, objdump, strings, strip.
V nové verzi Binutils:
- V GNU assembler:
- Byla přidána podpora nejnovějších rozšíření pro architektury RISC-V, LoongArch a AArch64. Pro x86 byla přidána podpora instrukcí XMODX, implementovaných v procesorech Zhaoxin PadLock. Pro RISC-V byla přidána podpora instrukcí 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.
- Byla zajištěna kompatibilita generování dat ve formátu SFrame se specifikací SFrame V2. Byla přidána podpora generování informací o trasování zásobníku (.sframe) z direktiv CFI na 64-bitových systémech s390 (s390x).
- Byla přidána podpora direktiv .errif a .warnif pro výstup diagnostických zpráv při splnění určitých podmínek.
- V linkeru byla v možnosti "—stats" implementována podpora volitelného argumentu, pomocí kterého lze uvést název souboru pro ukládání informací o využití zdrojů v různých fázích linkování. Název souboru lze také uvést prostřednictvím proměnné prostředí LD_STATS. Pro systémy RISC-V byla do linkeru přidána podpora nových formátů PLT (Procedure Linkage Table).
- Bylo provedeno různé zlepšení související s podporou formátu SFrame. Funkce pro práci s SFrame byly přesunuty do verzované knihovny libsframe.so.2.
- V deassembleru a utilitě readelf byla rozšířena podpora architektury RISC-V.
Zdroj: opennet.ru
