PÀrast kuue kuu arendustööd avaldati GNU C Library (glibc) 2.41 vÀljaanne, mis jÀrgib tÀielikult ISO C11 ja POSIX.1-2017 standardite nÔudeid. Uue vÀljaande loomises osales 79 arendajat.
Glibc 2.41-s teostatud tÀiustustest vÔib vÀlja tuua:
- Linuxi platvormile on lisatud uued funktsioonid sched_setattr ja sched_getattr, mille kaudu saab seadistada/loe ĂŒlesanne planeerija parameetreid. Praktikas vĂ”imaldavad funktsioonid seadistada tööde planeerimise poliitikaid, nagu SCHED_DEADLINE, mis kasutavad lisaparameetreid koos prioriteediga.
- Iconv utiliiti on lisatud tugi koha peal kodeerimise muutmiseks (kui sisendi ja vĂ€ljundi failide nimed kattuvad, loob iconv nĂŒĂŒd automaatselt ajutise faili ja asendab selle lĂ”petamisel algse faili).
- Pealkirja faili math.h on lisatud trigonometrilised 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 Ă”igesti ĂŒmardamise variandid funktsioonidest 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 on ARM64 GCS (Guarded Control Stack) laienduse tugi, mis kaitseb funktsioonidest naasmise aadresse ja blokeerib ROP (Return-Oriented Programming) meetodeid, kus eksploit koosneb juba olemasolevatest masinakeelsete kĂ€skude fragmentidest, mis lĂ”ppevad juhtimise tagastamise kĂ€suga. ARM64 GCS lubab kasutada kasutajapoolsete protsesside kaitsmiseks varjatud staki (shadow stack) tehnikat â pĂ€rast juhtimise edastamist funktsioonile salvestatakse tagastusadress mitte ainult tavalisse staki, vaid ka eraldi varjatud staki, mida ei saa otse muuta. Enne funktsioonist vĂ€ljumist tĂ”mmatakse tagastusadress varjatud stakist ja vĂ”rreldakse pĂ”histeki tagastusadressiga. GCS-tugiga Glibc kogumiseks on vajalik vĂ€hemalt versioonide binutils 2.44 ja GCC 15 olemasolu.
- Suure töö raames on parendatud koodigeneratsiooni ja matemaatiliste funktsioonide jÔudlust ARM64/AArch64 arhitektuuridele. Tehtud on optimeerimisi vektorkÀskude (SVE, Scalable Vector Extension) ja SIMD-laienemiste (Neon) kasutamisega.
- ARM64/AArch64 protsessoritega sĂŒsteemidele on lisatud Memory Protection Keys mehhanismi tugi, mis piirdub mĂ€lulehtedele juurdepÀÀsu piiramiseks ilma lehe tabelite muutmiseta.
- PowerPC64 protsessoritega sĂŒsteemidele on lisatud pikendatud kĂ€skude tugi, et kaitsta tagasisuunalise programmeerimise Ă€rahoidmiseks eksploitides.
- Uue arhitektuuri tĂŒĂŒp arch_kind_hygon on lisatud Hiina x86-64 protsessoritele Hygon, mis on ehitatud AMD tehnoloogiate pĂ”hjal.
- glibc testkomplekti on oluliselt laiendatud, testide arv on vÔrreldes eelmise vÀljaandega suurenenud 5408-lt 6232-le.
- glibc kokkupaneku testimiseks on lisatud vÔimalus kasutada teisi C ja C++ kompilaatoreid, erinevaid nendest, mis on tegelikku kokkupanekut kasutanud. NÀiteks 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' ja 'configure TEST_CC="clang" TEST_CXX="clang++"'.
- Faili /etc/resolv.conf ja keskkonnamuutuja RES_OPTIONS mÀÀratud valikutes on rakendatud vĂ”imalus kasutada eelmise valiku kustutamiseks eelseisva nĂ€itajana "-". NĂ€iteks, kui failis /etc/resolv.conf on mÀÀratud "options no-aaaa", siis protsessi kĂ€ivitamisel keskkonnamuutujaga "RES_OPTIONS=-no-aaaa" tĂŒhistatakse DNS-pĂ€ringute saatmise keeld AAAA kirje saamiseks.
- DNS-resolverisse on lisatud toe valik "strict-error", mille puhul funktsioon getaddrinfo(), kui aadressitĂŒĂŒpi (AF_UNSPEC) ei ole selgesĂ”naliselt mÀÀratud, pĂŒĂŒdleb A (IPv4) ja AAAA (IPv6) kirjete vÀÀrtuste saamiseks teiselt DNS-serverilt, kui esimese DNS-serveri pĂ€ring A vĂ”i AAAA kirjega ebaĂ”nnestus. Ilma "strict-error" mÀÀramiseta sellisel juhul tagastatakse edukalt töödeldud pĂ€ringu tulemus ja ebaĂ”nnestunud pĂ€ringu vÀÀrtus jĂ€etakse tĂ€helepanuta. NĂ€iteks, kui server tagastas kirje "A", kuid andis vea "AAAA" pĂ€ringul, siis getaddrinfo ilma "strict-error" valikuta tagastab kohe ainult IPv4 aadressi, kuid koos "strict-error" valikuga proovib ta esmase pĂ€ringute kordamist teise DNS-serveri poole.
- Kodeeringute andmed, sĂŒmbolite tĂŒĂŒpide info ja transliteratsioonitabelid on vĂ€rskendatud Unicode 16.0.0 spetsifikatsiooni toetamiseks.
- Lisatud makro «_ISOC2Y_SOURCE», mis vÔimaldab aktiveerida C2Y standardi eelnÔus mÀÀratud funktsioone. Selliseid funktsioone on vÔimalik aktiveerida ka makro _GNU_SOURCE ja kompilaatoriflagide («gcc -std=gnu2y») kaudu.
- Töösse on kaasatud benchtest tööriist, et jÀlgida erinevate funktsioonide (tavaliselt matemaatiliste) jÔudlust.
- Lisatud glibc.rtld.execstack seadistus, mille kaudu saab selgelt keelata kÀitatava steigi kasutamise.
- Lisatud laieneva ABI rseq (taasalustatavad jĂ€rjestused) tugi, mis pakub mehhanismi kiireks aatomseks operatsioonide tĂ€itmiseks (kui operatsioon katkestatakse teise threadâi poolt, taastatakse olek ja katsetatakse uuesti). Uues versioonis on rseq-s lisandunud laiemad funktsioonid, mis puudusid algses ABI-s, nagu paralleelse tĂ€itmise identifikaatorid (mm_cid, mĂ€lu kaardistamise koostöö ID) ja NUMA sĂ”lme identifikaatorid (node_id).
- Toetuseks on lĂ”petatud ARC (arceb-linux-gnu) big-endian sĂŒsteemide port.
- Rohkem kui(Buffer overflow) puudus, mis jĂ€rgneb funktsioonile assert(). Ăletus tekib, kui antakse liiga pikk programmi nimi (argv[0]). Probleem on tĂ”lgendatud mitteohtlikuks, kuna mĂ€lubufferi vĂ€ljas kirjutatakse 4 baiti, mille sisu ei saa rĂŒndaja kontrollida. Samas on huvitav, et debugimise funktsioonides osutus haavatavuseks viga, mis ilmnes praeguse rakenduse nime vĂ€ljundiga.
Allikas: opennet.ru
