Hat hónapnyi fejlesztés után megjelent a GNU C Library 2.42 (glibc) rendszerkönyvtár kiadása, amely teljes mértékben megfelel az ISO C23 és POSIX.1-2024 szabványok követelményeinek. Az új kiadás elkészítésében 70 fejlesztő vett részt.
A Glibc 2.42-ben megvalósított fejlesztések közül kiemelhető:
- A pthread_create függvényhez hozzáadódott a könnyűsúlyú őrzőoldalak támogatása a stack védelmére, amelyekhez való hozzáférés kivételt és a folyamat vészleállítását (SIGSEGV) idézi elő. A megvalósítás a madvise rendszerhívásban szereplő MADV_GUARD_INSTALL jelzőn alapul, amely a Linux 6.13 kerneltől támogatott. A PROT_NONE módban történő leképezéssel összehasonlítva az őrzőoldalak hatékonyabban blokkolják a kód végrehajtását a lefoglalt memória területen kívül, mivel létrehozásuk nem igényel új virtuális memória területet.
- A math.h fejlécfájlban új hatványozó és gyök számító függvények kerültek hozzáadásra és megjelenítésre: compoundn, pown és powr, rootn és rsqrt, amelyek az ISO C23 szabványban kerültek meghatározásra. A függvények változatai implementálva vannak float, double, long double, _FloatN és _FloatNx típusokra, valamint a tgmath.h-ból származó általános típust illetően.
- Linux platformon implementálva lett a pthread_gettid_np függvény, amely a gettid() függvényhez hasonlóan egyedi szálazonosítót ad vissza, de kibővített hibaellenőrzéssel rendelkezik (határozatlan viselkedés esetén a folyamat lezárul).
- Új, pozitív értékekkel dolgozó függvények kerültek hozzáadásra: uabs, ulabs, ullabs és uimaxabs. Ezek a függvények bekerülnek a jövőbeli C szabványba.
- Linux platformon a termios.h programozási interfész implementálta az tetszőleges átviteli sebesség támogatását. A speed_t típus újra definiálásra került, és most az "unsigned int" típusnak felel meg, mint a Linux kernelben.
- A malloc függvényben használt lokális szálkészlet (tcache) támogatja a nagy memóriablokkok gyorsítótárazását. A blokk maximális mérete a glibc.malloc.tcache_max beállítással felülírható, amely akár 4194304 értéket is elfogadhat. A gyorsítótár teljesítménye javult a kis méretű blokkok esetén.
- A configure telepítési scripthez hozzáadódott a "—enable-sframe" opció, amely aktiválja az SFrame formátum támogatását, amely a verem nyomkövetési információinak megjelenítésére szolgál, és amelyet a backtrace függvény támogat. Az SFrame használatához legalább binutils 2.45 verzió szükséges.
- A CORE-MATH projektből átkerültek az optimalizált matematikai függvények, mint az acospif, asinpif, atanpif, atan2pif, cospif, sinpif és tanpif.
- Jelentősen kibővült a tesztkészlet, amely most különböző printf és scanf függvénycsaládok működését is lefedi.
- Hozzáadva az Intel processzorok azonosításához szükséges kód az Arrow Lake, Panther Lake, Clearwater Forest és Diamond Rapids mikroarchitektúrák alapján.
- Hozzáadva a z17 platform támogatása (az IBM Z/S390 új generációs mainframe-jéhez).
- A glibc.rtld.execstack beállításba hozzáadva a kompatibilitási mód támogatása, hogy támogassa azokat a programokat, amelyek végrehajtható veremre támaszkodnak dinamikusan betöltött könyvtárakon keresztül.
- Eltávolítva a termio.h fejlécfájlt és a termio struktúra definícióját a sys/ioctl.h-ból. A termio.h programozási interfész elavultnak nyilvánították a POSIX.1-ben (1988) és helyébe a termios.h lépett.
- A Glibc fordításához mostantól legalább GCC 12.1 és GNU Binutils 2.39 verziók szükségesek.
- Sebezhetőségek kiküszöbölve:
- CVE-2025-0395 — puffertúlcsordulás az assert() függvény végrehajtásakor. A túlfutás akkor lép fel, amikor túl hosszú programnevet adunk meg (argv[0]). A probléma nem tekinthető veszélyesnek, mivel a puffert meghaladó 4 byte tartalmát a támadó nem tudja irányítani. Ugyanakkor érdekes maga a tény, hogy a futtatás során a jelenlegi alkalmazás nevét megjelenítő hiba miatt egy sebezhetőség lépett fel a hibakereső funkciók között.
- CVE-2025-5702, CVE-2025-5745 — sebezhetőségek a Power10 processzorok strcmp és strncmp függvényeinek megvalósításában, amelyek hibát okoznak a v20-v31 vektorregiszterek mentése és visszaállítása során, melyeket a függvényhívások között kellene megőrizni. A sebezhetőséget adatok módosítására vagy a regiszterek tartalmának meghatározására lehet felhasználni, amelyeket másodlagosan a funkció használ.
- CVE-2025-8058 — sebezhetőség a regcomp függvényben, amely dupla memóriaszabadításhoz (double-free) vezet.
Továbbá érdemes megemlíteni a GNU Binutils 2.45 rendszeres eszközkészlet kiadását, amely tartalmazza a GNU linker, GNU assembler, nm, objdump, strings, strip programokat.
Az új Binutils verzióban:
- A GNU assemblerben:
- Hozzáadva a legújabb kiterjesztések támogatása az RISC-V, LoongArch és AArch64 architektúrákhoz. Az x86 esetében támogatva az XMODX utasításokat, amelyeket a Zhaoxin PadLock processzorok valósítanak meg. Az RISC-V esetében a 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 és xmipslsp v1.0 utasítások támogatása is hozzá lett adva.
- Biztosítva van az SFrame formátumban történő adategyesítés kompatibilitása az SFrame V2 specifikációval. Hozzáadva a támogatás a verem követési információk (.sframe) generálásához CFI direktívákból 64 bites s390 rendszereken (s390x).
- Hozzáadva a .errif és .warnif direktívák támogatása a diagnosztikai üzenetek megjelenítésére bizonyos feltételek teljesülésekor.
- A linkerben a "—stats" opcióhoz implementálva van egy választható argumentum, amellyel megadható egy fájl neve, amelyben a különböző linkelési szakaszok alatt az erőforrás-felhasználás adatait menthetjük. A fájlnevet az LD_STATS környezeti változó segítségével is megadhatjuk. RISC-V rendszerekhez új PLT (Procedure Linkage Table) formátumok támogatása került a linkerbe.
- Különféle fejlesztések valósultak meg az SFrame formátumának támogatásával kapcsolatban. Az SFrame-mel végzett műveletek egy verzióval ellátott libsframe.so.2 könyvtárba kerültek.
- A disassemblerben és a readelf utilityben kibővült a RISC-V architektúra támogatása.
Forrás: opennet.ru
