Efter seks måneders udvikling er udgivet version 2.41 af GNU C Library (glibc), der fuldt ud overholder kravene i standarderne ISO C11 og POSIX.1-2017. I udarbejdelsen af den nye version har 79 udviklere deltaget.
Blandt forbedringerne i Glibc 2.41 kan nævnes:
- For Linux-platformen er der tilføjet nye funktioner sched_setattr og sched_getattr, som gør det muligt at indstille/læse parametrerne for opgaveplanlæggeren. I praksis gør disse funktioner det muligt at konfigurere planlægningspolitikker såsom SCHED_DEADLINE, der bruger ekstra parametre ud over prioriteten.
- I ikonet iconv er der tilføjet støtte til at konvertere kodning på stedet (hvis navnet på ind- og udkastfilerne er det samme, opretter iconv nu automatisk en midlertidig fil og erstatter den oprindelige fil med den, når konverteringen er afsluttet).
- Tre trigonometriske funktioner, der blev introduceret i standarden C23 (TS 18661-4:2015), er blevet tilføjet til overskriftsfilen math.h: acospi, asinpi, atan2pi, atanpi, cospi, sinpi og tanpi.
- Fra projektet CORE-MATH er der overført optimerede varianter af funktioner, der anvender korrekt afrunding: exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf og tanhf.
- Der er tilføjet støtte til ARM64 GCS (Guarded Control Stack) udvidelsen for hardwarebeskyttelse af returadresser fra funktioner og for at blokere exploits, der anvender metoder til return-oriented programming (ROP - Return-Oriented Programming, hvor en exploit dannes ud fra allerede eksisterende stumper af maskininstruktioner, der afsluttes med en returkommando). ARM64 GCS muliggør brugen af shadow stack-teknikken til at beskytte processer i brugerrummet - efter overførsel af kontrol til funktionen gemmes returadresserne af processoren ikke kun i den almindelige stack, men også i en separat shadow stack, der ikke kan ændres direkte. Før udgangen fra funktionen hentes returadressen fra shadow stack og sammenlignes med returadressen fra den primære stack. For at bygge Glibc med støtte til GCS kræves minimum versioner af binutils 2.44 og GCC 15.
- Der er udført betydeligt arbejde for at forbedre kodegenereringen og øge ydeevnen af matematiske funktioner til ARM64/AArch64-arkitektur. Optimeringer er implementeret ved hjælp af vektorinstruktioner (SVE, Scalable Vector Extension) og SIMD-udvidelser (Neon).
- For systemer med ARM64/AArch64-processorer er der tilføjet support for mekanismen Memory Protection Keys, der anvendes til at begrænse adgangen til hukommelsessider uden at ændre hukommelsestabellerne.
- For systemer med PowerPC64-processorer er der tilføjet support for udvidede instruktioner til beskyttelse mod brug af return-oriented programming i exploits.
- En ny arkitektur type arch_kind_hygon er tilføjet for kinesiske x86-64 Hygon-processorer, der er bygget på AMD-teknologier.
- Testpakken til glibc er blevet betydeligt udvidet, og antallet af tests er steget fra 5408 til 6232 sammenlignet med den tidligere version.
- Muligheden for at teste glibc-bygning med C- og C++-compiler, der er forskellige fra dem, der blev brugt til den faktiske bygning, er tilføjet. For eksempel, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' og 'configure TEST_CC="clang" TEST_CXX="clang++"'.
- I indstillingerne, der angives i filen /etc/resolv.conf og miljøvariablen RES_OPTIONS, er der implementeret en mulighed for at bruge prefixet "-" til at fjerne en tidligere indstillet option med det navn. For eksempel, hvis filen /etc/resolv.conf angiver "options no-aaaa", så vil når processen køres med miljøvariablen "RES_OPTIONS=-no-aaaa" forbuddet mod at sende DNS-forespørgsler for at få AAAA-poster blive ophævet.
- I DNS-resolveren er der tilføjet support for optionen "strict-error", hvor funktionen getaddrinfo(), hvis adresse typen (AF_UNSPEC) ikke er angivet, vil forsøge at få værdier for A-poster (IPv4) og AAAA-poster (IPv6) fra en anden DNS-server, hvis anmodningen om A- eller AAAA-poster til den første DNS-server mislykkedes. Uden "strict-error" angivelse vil i en sådan situation blive returneret den adresse, der blev opnået fra en succesfuldt behandlet anmodning, og værdien fra den mislykkede anmodning vil blive ignoreret. For eksempel, hvis server returnerede en "A"-post, men gav en fejl ved anmodningen om "AAAA", vil getaddrinfo uden "strict-error" straks kun returnere IPv4-adressen, mens den med "strict-error" vil forsøge at gentage anmodningerne til en anden DNS-server.
- Data for kodninger, information om tegn typer og translitterations tabeller er blevet opdateret for at understøtte Unicode-specifikationen 16.0.0.
- Der makro «_ISOC2Y_SOURCE» er blevet tilføjet, hvilket muliggør aktivering af funktioner defineret i udkaststandarden C2Y. Sådanne funktioner kan også aktiveres ved hjælp af makroen _GNU_SOURCE og via kompilatorens flag («gcc -std=gnu2y»).
- Der er implementeret værktøjet benchtest til at overvåge ydeevnen af forskellige funktioner (normalt matematiske).
- Indstillingen glibc.rtld.execstack er blevet tilføjet, som gør det muligt at forhindre brugen af en eksekverbar stak eksplicit.
- Støtte til det udvidelige ABI rseq (restartable sequences) er blevet tilføjet, hvilket giver en mekanisme til hurtig atomær udførelse af operationer (hvis operationen bliver afbrudt af en anden tråd, nulstilles tilstanden og en ny forsøgsudførelse igangsættes). I den nye version er det muligt at bruge udvidede funktioner i rseq, der ikke findes i den oprindelige ABI, såsom identifikatorer for parallelt udførelse (mm_cid, memory-map concurrency ID) og NUMA-nodenummer (node_id).
- Støtte til porten til big-endian ARC-systemer (arceb-linux-gnu) er blevet fjernet.
- Sårbarhed (CVE-2025-039) er blevet rettet, som førte til buffer overflow under udførelsen af assert() funktionen. Buffer overflow opstår ved angivelse af et for langt programnavn (argv[0]). Problemet anses for at være ikke-kritisk, da der skrives 4 byte uden for bufferen, hvis indhold ikke kan kontrolleres af en angriber. Det er dog interessant, at der i de fejlfinding funktioner opstår en sårbarhed, der stammer fra en fejl ved udskrivning af navnet på den aktuelle applikation.
Kilde: opennet.ru
