Nakon šest mjeseci razvoja, objavljena je sistemska biblioteka GNU C Library (glibc) 2.41, koja je u potpunosti u skladu sa standardima ISO C11 i POSIX.1-2017. U stvaranju novog izdanja sudjelovalo je 79 programera.
Neka od poboljšanja implementiranih u Glibc 2.41 uključuju:
- Za platformu Linux Dodane su nove funkcije, sched_setattr i sched_getattr, za postavljanje i čitanje parametara raspoređivača zadataka. U praksi, ove funkcije omogućuju konfiguriranje pravila raspoređivanja zahtjeva, kao što je SCHED_DEADLINE, koja koriste parametre koji nisu prioritet.
- Uslužni program iconv je ažuriran kako bi podržao pretvorbu kodiranja na mjestu (ako se nazivi ulaznih i izlaznih datoteka podudaraju, iconv sada automatski stvara privremenu datoteku i njome zamjenjuje izvornu datoteku nakon završetka pretvorbe).
- Trigonometrijske funkcije uvedene u standardu C23 (TS 18661-4:2015) dodane su u datoteku zaglavlja math.h: acospi, asinpi, atan2pi, atanpi, cospi, sinpi i tanpi.
- Optimizirane i zaokruživanje inačice funkcija exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cBRTF, erff, erfcf, lgammaf, tgammaf, aCOSF, acoshf, asinf, asin, ASinh projekt CORE-MATH, atanhf, coshf, sinhf i tanhf.
- Dodana podrška za proširenje ARM64 GCS (Guarded Control Stack) za hardversku zaštitu povratnih adresa od funkcija i blokiranje eksploatacija koje koriste povratno orijentirano programiranje (ROP - Return-Oriented Programming, eksploatacija se formira od postojećih dijelova strojnih instrukcija koje završavaju s povratna instrukcija). ARM64 GCS dopušta korištenje tehnologije shadow stack za zaštitu procesa u korisničkom prostoru - nakon prijenosa kontrole na funkciju, procesor sprema povratne adrese ne samo u uobičajeni stog, već iu poseban shadow stack, koji se ne može izravno mijenjati . Prije izlaska iz funkcije, povratna adresa se izvlači iz sjenčanog stoga i uspoređuje s povratnom adresom iz glavnog stoga. Izgradnja Glibca s podrškom za GCS zahtijeva najmanje binutils 2.44 i GCC 15.
- Puno je posla učinjeno na poboljšanju generiranja koda i povećanju performansi matematičkih funkcija za ARM64/AArch64 arhitekturu. Implementirane su optimizacije pomoću vektorskih instrukcija (SVE, Scalable Vector Extension) i SIMD ekstenzija (Neon).
- Za sustave s ARM64/AArch64 procesorima, dodana je podrška za mehanizam Memory Protection Keys, koji se koristi za ograničavanje pristupa memorijskim stranicama bez mijenjanja tablice memorijskih stranica.
- Za sustave s PowerPC64 procesorima, dodana je podrška za proširene instrukcije kako bi se zaštitilo od korištenja povratno orijentiranog programiranja u eksploatacijama.
- Dodan je novi tip arhitekture arch_kind_hygon za kineske x86-64 Hygon procesore temeljene na AMD tehnologijama.
- Skup glibc testova značajno je proširen, s brojem testova koji je povećan s 5408 na 6232 u usporedbi s prethodnim izdanjem.
- Dodana je mogućnost testiranja glibc međugradnji pomoću C i C++ prevodilaca koji nisu korišteni za stvarnu gradnju. Na primjer, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' i 'configure TEST_CC="clang" TEST_CXX="clang++"'.
- Opcije navedene u datoteci /etc/resolv.conf i varijabli okoline RES_OPTIONS sada podržavaju korištenje prefiksa "-" za brisanje prethodno postavljene opcije s danim imenom. Na primjer, ako datoteka /etc/resolv.conf specificira "options no-aaaa", tada će pokretanje procesa s varijablom okruženja "RES_OPTIONS=-no-aaaa" deblokirati DNS upite za dobivanje AAAA zapisa.
- DNS resolver sada podržava opciju "strict-error". Ova opcija uzrokuje da funkcija getaddrinfo(), osim ako tip adrese (AF_UNSPEC) nije izričito naveden, pokuša dohvatiti vrijednosti zapisa A (IPv4) i AAAA (IPv6) s drugog DNS poslužitelja ako upit za zapis A ili AAAA prvom DNS poslužitelju ne uspije. Bez navođenja "strict-error", u takvoj situaciji, vratit će se adresa dobivena kao rezultat uspješnog upita, a vrijednost neuspjelog upita bit će zanemarena. Na primjer, ako server vratio je zapis "A", ali je vratio grešku prilikom upita za "AAAA", getaddrinfo bez opcije "strict-error" će odmah vratiti samo IPv4 adresu, a s opcijom "strict-error" će pokušati ponoviti zahtjeve drugom DNS poslužitelju.
- Podaci o kodiranju, podaci o vrsti znakova i tablice transliteracije ažurirani su kako bi podržali specifikaciju Unicode 16.0.0.
- Dodana makronaredba "_ISOC2Y_SOURCE" za omogućavanje značajki definiranih u nacrtu standarda C2Y. Slične značajke također se mogu omogućiti korištenjem makronaredbe _GNU_SOURCE i preko zastavica prevoditelja ("gcc -std=gnu2y").
- Implementiran benchtest alat za praćenje izvedbe raznih funkcija (obično matematičkih).
- Dodana postavka glibc.rtld.execstack, putem koje možete eksplicitno onemogućiti korištenje izvršnog stoga.
- Dodana podrška za rseq (restartable sequences) proširivi ABI, koji pruža mehanizam za brzo atomsko izvršavanje operacija (ako operaciju prekine druga dretva, stanje se resetira i ponovno se pokušava izvršiti). Nova verzija uvodi mogućnost korištenja proširenih značajki u rseq koje nisu bile dostupne u izvornom ABI-ju, kao što su identifikatori paralelnog izvođenja (mm_cid, ID istovremenosti memorijske mape) i identifikatori NUMA čvorova (node_id).
- Priključak za big-endian ARC sustave (arceb-linux-gnu) je ukinut.
- Ispravljena je ranjivost (CVE-2025-039) koja je mogla dovesti do prekoračenja međuspremnika prilikom izvršavanja funkcije assert(). Do preljeva dolazi kada je navedeni naziv programa (argv[0]) prevelik. Problem se smatra bezopasnim jer su 4 bajta zapisana izvan međuspremnika, čiji sadržaj napadač ne može kontrolirati. Ono što je zanimljivo je sama činjenica da se pojavila ranjivost u debugging funkcijama koja nastaje zbog greške prilikom prikaza naziva trenutne aplikacije.
Izvor: opennet.ru
