Na zes maanden ontwikkeling is de release van de GNU C Library (glibc) 2.41 gepubliceerd, die volledig voldoet aan de eisen van de ISO C11- en POSIX.1-2017-normen. Bij de totstandkoming van deze nieuwe uitgave waren 79 ontwikkelaars betrokken.
Verschillende verbeteringen in Glibc 2.41 zijn te noemen:
- Voor het Linux-platform zijn de nieuwe functies sched_setattr en sched_getattr toegevoegd, waarmee de parameters van de taakplanner ingesteld en gelezen kunnen worden. In de praktijk maken deze functies het mogelijk om planningspolitieken, zoals SCHED_DEADLINE, in te stellen, waarbij naast de prioriteit ook extra parameters worden gebruikt.
- De utiliteit iconv heeft ondersteuning gekregen voor in-place conversie van codering (wanneer de naam van de invoer- en uitvoerbestanden overeenkomt, creëert iconv nu automatisch een tijdelijk bestand en vervangt dit het oorspronkelijke bestand na voltooiing van de conversie).
- Aan de headerfile math.h zijn de trigonometrische functies toegevoegd die in de C23-standaard verschijnen (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi en tanpi.
- Van het CORE-MATH-project zijn de geoptimaliseerde en correct afgeronde versies van de functies exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf en tanhf overgenomen.
- Ondersteuning voor de ARM64 GCS-uitbreiding (Guarded Control Stack) is toegevoegd voor hardwarematige bescherming van de retouradressen van functies en om exploits te blokkeren die gebruik maken van Return-Oriented Programming (ROP - waarbij exploits worden gecreëerd uit bestaande stukjes machine-instructies die eindigen met een retourinstructie). De ARM64 GCS stelt gebruikersprocessen in staat om de techniek van de shadow stack (schaduwstack) te gebruiken voor bescherming - na het overdragen van de controle aan een functie, worden de retouradressen door de processor opgeslagen in zowel de normale stack als in een aparte schaduwstack die niet rechtstreeks kan worden gewijzigd. Voordat de controle uit de functie teruggegeven wordt, wordt het retouradres uit de schaduwstack gehaald en vergeleken met het retouradres uit de hoofdstack. Voor het bouwen van Glibc met ondersteuning voor GCS zijn minimaal de versies binutils 2.44 en GCC 15 vereist.
- Er is veel werk verzet om de codegeneratie te verbeteren en de prestaties van wiskundige functies voor de ARM64/AArch64-architectuur te verhogen. Optimalisaties zijn geïmplementeerd met behulp van vectorinstructies (SVE, Scalable Vector Extension) en SIMD-extensies (Neon).
- Voor systemen met ARM64/AArch64-processors is ondersteuning toegevoegd voor het Memory Protection Keys mechanisme, dat wordt gebruikt om de toegang tot geheugenspagina's te beperken zonder de paginatabellen te wijzigen.
- Voor systemen met PowerPC64-processors is ondersteuning toegevoegd voor uitgebreide instructies ter bescherming tegen return-oriented programming in exploits.
- Een nieuw type architectuur arch_kind_hygon is toegevoegd voor de Chinese x86-64-processors Hygon, gebouwd op basis van AMD-technologieën.
- De testset voor glibc is aanzienlijk uitgebreid, met het aantal tests dat is gestegen van 5408 naar 6232 in vergelijking met de vorige release.
- Er is een mogelijkheid toegevoegd om de glibc-build te testen met C en C++ compilers die verschillen van degenen die zijn gebruikt voor de feitelijke build. Bijvoorbeeld, ‘configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"‘ en ‘configure TEST_CC="clang" TEST_CXX="clang++"‘.
- In de opties die worden aangegeven in het bestand /etc/resolv.conf en de omgevingsvariabele RES_OPTIONS, is de mogelijkheid geïmplementeerd om het prefix «-» te gebruiken om eerder ingestelde opties met die naam te wissen. Bijvoorbeeld, als in het bestand /etc/resolv.conf «options no-aaaa» staat, dan zal bij het starten van een proces met de omgevingsvariabele «RES_OPTIONS=-no-aaaa» de beperking op het versturen van DNS-verzoeken voor het verkrijgen van een AAAA-record worden opgeheven.
- In de DNS-resolver is ondersteuning toegevoegd voor de optie «strict-error», waarbij de functie getaddrinfo(), als het type adressen (AF_UNSPEC) niet expliciet is opgegeven, probeert de waarden van A (IPv4) en AAAA (IPv6) records van een andere DNS-server te verkrijgen, als het verzoek om een A- of AAAA-record bij de eerste DNS-server is mislukt. Zonder de optie «strict-error» zal in een dergelijke situatie het adres dat is verkregen uit een succesvol verwerkte aanvraag worden geretourneerd, terwijl de waarde van de mislukte aanvraag wordt genegeerd. Bijvoorbeeld, als server een «A» record retourneert, maar een fout geeft bij het verzoek om «AAAA», zal getaddrinfo zonder de optie «strict-error» onmiddellijk alleen het IPv4-adres retourneren, terwijl het met de optie «strict-error» zal proberen om verzoeken bij een andere DNS-server te herhalen.
- De gegevens coderingen, informatie over het type tekens en transliteratietabellen zijn bijgewerkt ter ondersteuning van de Unicode specificatie 16.0.0.
- De macro «_ISOC2Y_SOURCE» is toegevoegd, waarmee functies kunnen worden geactiveerd die zijn gedefinieerd in de conceptstandaard C2Y. Dergelijke mogelijkheden kunnen ook worden geactiveerd met de macro _GNU_SOURCE en via compiler-vlaggen («gcc -std=gnu2y»).
- De benchtest-tool is geïmplementeerd voor het volgen van de prestaties van verschillende functies (meestal wiskundige).
- Er is een instelling glibc.rtld.execstack toegevoegd, waarmee het gebruik van een uitvoerbare stack expliciet kan worden verboden.
- Ondersteuning voor de uitbreidbare ABI rseq (herstartbare reeksen) is toegevoegd, die een mechanisme biedt voor snelle atomische uitvoering van bewerkingen (in het geval dat een bewerking wordt onderbroken door een andere thread, wordt de status teruggezet en wordt geprobeerd de bewerking opnieuw uit te voeren). In de nieuwe versie zijn er uitgebreide mogelijkheden voor gebruik in rseq toegevoegd, zoals parallelle uitvoeringsidentificatoren (mm_cid, memory-map concurrency ID) en NUMA-knooppuntidentificatoren (node_id).
- De ondersteuning voor de big-endian poort van ARC-systemen (arceb-linux-gnu) is beëindigd.
- Er is een kwetsbaarheid verholpen (CVE-2025-039) die leidt tot een buffer-overflow bij het uitvoeren van de functie assert(). De overflow gebeurt wanneer er een te lange programma-naam (argv[0]) wordt opgegeven. Dit probleem wordt als niet-kritiek beschouwd, aangezien er 4 bytes buiten de buffer worden geschreven waarvan de inhoud niet door een aanvaller kan worden gecontroleerd. Opmerkelijk is het feit dat er een kwetsbaarheid is opgetreden in debugfuncties veroorzaakt door een fout bij het weergeven van de naam van de huidige applicatie.
Bron: opennet.ru
