Kuue kuu arendustöö järel on välja antud GNU C Library (glibc) versioon 2.41, mis järgib täielikult ISO C11 ja POSIX.1-2017 standardite nõudeid. Uue versiooni loomises osales 79 arendajat.
Glibc 2.41 realiseeritud täiustustest võib välja tuua:
- Linuxi platvormile on lisatud uued funktsioonid sched_setattr ja sched_getattr, mille kaudu on võimalik seadistada/loodud ülesande planeerimise parameetreid. Praktikas võimaldavad funktsioonid seadistada ülesannete planeerimispoliitikaid, nagu SCHED_DEADLINE, kus kasutatakse täiendavaid parameetreid, peale prioriteedi.
- Iconvi utiliiti on lisatud kohapealse kodeerimise konverteerimise tugi (kui sisend- ja väljundfailide nimed kattuvad, loob iconv nüüd automaatselt ajutise faili ja pärast konverteerimise lõpetamist asendab selle algse faili).
- Pealkirjafaili math.h on lisatud trigonomeetrilised funktsioonid, mis ilmusid C23 standardis (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi ja tanpi.
- CORE-MATH projektist on üle kantud optimeeritud ja õiget ümardamist kasutavad funktsioonid: exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf ja tanhf.
- Lisatud ARM64 GCS (Guarded Control Stack) toe tugi, mis pakub riistvaralist kaitset funktsioonide tagasituleku aadresside vastu ja blokeerib ROP (Return-Oriented Programming) meetodeid, mille puhul kasutatakse juba olemasolevaid masiiniliste käskude osi, mis lõppevad tagastamiskäsuga. ARM64 GCS võimaldab kasutada kasutajaruumi protsesside kaitseks varjatud steki tehnikat (shadow stack) — pärast funktsiooni juhtimise edastamist salvestab protsessor tagastusaadressid mitte ainult tavalises stekis, vaid ka eraldi varjatud stekis, mida ei saa otse muuta. Enne funktsioonist lahkumist toimetatakse tagastusaadress varjatud stekist välja ja võrreldakse peastekiga saadud tagastusaadressiga. Glibci koostamiseks GCS toe toetamiseks on vajalik vähemalt binutils versioon 2.44 ja GCC 15.
- Tehtud on suur töö koodi genereerimise ja matemaatiliste funktsioonide jõudluse parandamiseks ARM64/AArch64 arhitektuurile. Optimeerimised on ellu viidud vektorinstruktsioonide (SVE, skaleeritavad vektori laiendid) ja SIMD-laienduste (Neon) kasutamisega.
- ARM64/AArch64 protsessoritega süsteemidesse on lisatud mälu kaitse võtmete mehhanismi tugi, mida kasutatakse mälu lehtede juurdepääsu piiramiseks ilma mälu lehtede tabelit muutmata.
- PowerPC64 protsessoritega süsteemidesse on lisatud laiendatud juhiseid, mis kaitsevad tagasipööramisprogrammeerimise kasutamise eest eksploitides.
- Uue arhitektuuri tüüp arch_kind_hygon on lisatud Hiina x86-64 protsessoritele Hygon, mis on loodud AMD tehnoloogiate põhjal.
- Testikogumik glibc jaoks on oluliselt laiendatud, testide arv on võrreldes eelmise väljaandega suurenenud 5408-lt 6232-le.
- Glibc kokkupaneku testimise võimalus on lisatud, kasutades C ja C++ kompilaatoreid, mis erinevad nendest, mida on kasutatud tegeliku kokkupaneku jaoks. Näiteks 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' ja 'configure TEST_CC="clang" TEST_CXX="clang++"'.
- Failis /etc/resolv.conf ja keskkonnamuutuja RES_OPTIONS määratud valikutes on rakendatud võimalus kasutada eel-tingimust «-» varasemalt määratud valiku kustutamiseks selle nimega. Näiteks, kui failis /etc/resolv.conf on määratud «options no-aaaa», siis protsessi käivitamisel, kus keskkonnamuutuja on «RES_OPTIONS=-no-aaaa», tühistatakse DNS-päringute tegemise keeld AAAA kirje saamiseks.
- DNS-resolvooris on lisatud toetus valikule «strict-error», mille korral funktsioon getaddrinfo(), kui aadressitüüp (AF_UNSPEC) ei ole selgelt määratud, proovib saada A (IPv4) ja AAAA (IPv6) kirjeid teiselt DNS-serverilt, kui A või AAAA kirje päring esimesele DNS-serverile lõpeb veaga. Ilma «strict-error» määramata tagastatakse sellisel juhul aadress, mis saadi edukalt töödeldud päringust, ja ebaõnnestunud päringu tulemus ignoreeritakse. Näiteks, kui server tagastati «A» kirje, kuid tekkis viga «AAAA» päringus, siis getaddrinfo ilma «strict-error» valikuta tagastab kohe ainult IPv4 aadressi, kuid «strict-error» valikuga proovib see päringute kordamist teise DNS-serveri poole.
- Kodeeringute andmed, sümbolite tüüpidest teave ja transliteratsiooni tabelid on uuendatud, et toetada Unicode 16.0.0 spetsifikatsiooni.
- Lisatud makro „_ISOC2Y_SOURCE”, mis võimaldab aktiveerida C2Y standardi mustandi määratud funktsioonid. Samuti on selliseid funktsioone võimalik aktiveerida makro abil _GNU_SOURCE ja kompilaatori lippude kaudu („gcc -std=gnu2y”).
- Töötavaid tööriistu benchtesti jaoks, et jälgida erinevate funktsioonide (peamiselt matemaatiliste) jõudlust, on sisse viidud.
- Lisatud seade glibc.rtld.execstack, mida saab kasutada, et selgelt keelata täitmiseks mõeldud kausi kasutamine.
- Toetatakse laiendatud ABI rseq (taastatavad järjestused), mis pakub mehhanismi kiireks aatomseks protseduuride täitmiseks (kui protseduuri katkestab teine niit, siis olek lähtestatakse ja tehakse uus katse täita). Uues versioonis on rseq-s võimalik kasutada laiendatud funktsioone, mis puuduvad algses ABI-s, näiteks paralleelse täitmise identifikaatorid (mm_cid, mälu kaardistamise konkurentsi ID) ja NUMA sõlme identifikaatorid (node_id).
- Toetuse lõpetamine big-endian süsteemide ARC (arceb-linux-gnu) jaoks.
- Parandatud haavatavus (CVE-2025-039), mis põhjustab mälupuhvri ülerahvastamise funktsiooni assert() täitmisel. Ülerahvastamine toimub siis, kui programmile nime (argv[0]) antakse liiga suur. Probleemi peetakse mitteohtlikuks, kuna puhvri piiridest kirjutatakse välja 4 baiti, mille sisu ei suuda ründaja kontrollida. Eriti huvitav on, et vead esinevad tõrkeotsingu funktsioonides, mis tulenevad praeguse rakenduse nime väljastamise veast.
Allikas: opennet.ru
