Po šesti měsících vývoje byl zveřejněn release systémové knihovny GNU C Library (glibc) 2.41, která plně vyhovuje požadavkům norem ISO C11 a POSIX.1-2017. Na vytvoření nové verze se podílelo 79 vývojářů.
Mezi vylepšeními implementovanými v Glibc 2.41 lze vyzdvihnout:
- Na platformě Linux byly přidány nové funkce sched_setattr a sched_getattr, které umožňují nastavit / přečíst parametry plánovače úloh. V praxi tyto funkce umožňují konfigurovat politiky plánování požadavků, jako např. SCHED_DEADLINE, kde se používají další parametry kromě priority.
- Do utility iconv byla přidána podpora pro místní převod kódování (pokud se názvy vstupního a výstupního souboru shodují, iconv nyní automaticky vytvoří dočasný soubor a po dokončení převodu nahradí původní soubor tímto souborem).
- Do hlavičkového souboru math.h byly přidány trigonometrické funkce, které se objevily ve standardu C23 (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi a tanpi.
- Z projektu CORE-MATH byly převedeny optimalizované a správně zaokroulené varianty funkcí exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf a tanhf.
- Byla přidána podpora rozšíření ARM64 GCS (Guarded Control Stack) pro hardwarovou ochranu adres návratu z funkcí a blokování exploitů, které využívají metody orientovaného návratu (ROP - Return-Oriented Programming, exploit je tvořen z již existujících kusů strojového kódu, které končí instrukcí návratu řízení). ARM64 GCS umožňuje použít pro ochranu procesů ve veřejném prostoru techniku stínového zásobníku (shadow stack) - po předání řízení funkci, adresy návratu jsou uchovávány procesorem nejen v běžném zásobníku, ale také v samostatném stínovém zásobníku, který nemůže být změněn přímo. Před opuštěním funkce je adresa návratu vytažena ze stínového zásobníku a porovnána s adresou návratu z hlavního zásobníku. Pro sestavení Glibc s podporou GCS je vyžadováno alespoň verze binutils 2.44 a GCC 15.
- Byla provedena rozsáhlá práce na zlepšení generování kódu a zvýšení výkonu matematických funkcí pro architekturu ARM64/AArch64. Byly implementovány optimalizace pomocí vektorových instrukcí (SVE, Scalable Vector Extension) a SIMD rozšíření (Neon).
- Pro systémy s procesory ARM64/AArch64 byla přidána podpora mechanismu Memory Protection Keys, který se používá k omezení přístupu k stránkám paměti bez změny tabulky stránek paměti.
- Pro systémy s procesory PowerPC64 byla přidána podpora rozšířených instrukcí pro ochranu proti návratovému programování v exploitech.
- Byl přidán nový typ architektury arch_kind_hygon pro čínské procesory x86-64 Hygon, které jsou založeny na technologiích AMD.
- Byl výrazně rozšířen testovací rámec pro glibc, přičemž počet testů vzrostl z 5408 na 6232 v porovnání s předchozí verzí.
- Byla přidána možnost testování sestavení glibc pomocí překladatelů C a C++, které se liší od těch, které byly použity pro skutečné sestavení. Například, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' a 'configure TEST_CC="clang" TEST_CXX="clang++"'.
- V možnostech uvedených v souboru /etc/resolv.conf a proměnné prostředí RES_OPTIONS byla implementována možnost použití prefixu "-" pro zrušení dříve nastavené možnosti se stejným názvem. Například, pokud je v souboru /etc/resolv.conf uvedeno "options no-aaaa", pak při spuštění procesu s proměnnou prostředí "RES_OPTIONS=-no-aaaa" bude zrušen zákaz odesílání DNS dotazů pro získání záznamu AAAA.
- Do DNS resolvér byla přidána podpora volby "strict-error", při které funkce getaddrinfo(), pokud není explicitně uveden typ adresy (AF_UNSPEC), se pokusí získat hodnoty záznamů A (IPv4) a AAAA (IPv6) z jiného DNS serveru, pokud dotaz na záznam A nebo AAAA na prvním DNS serveru skončí chybou. Bez uvedení "strict-error" se v podobné situaci vrátí adresa získaná z úspěšně zpracovaného dotazu a hodnota neúspěšného dotazu bude ignorována. Například, pokud server vrátil záznam "A", ale vrátil chybu při dotazu "AAAA", getaddrinfo bez volby "strict-error" vrátí ihned pouze adresu IPv4, zatímco s volbou "strict-error" se pokusí zopakovat dotazy na jiného DNS serveru.
- Data kódování, informace o typech znaků a tabulky transliterace byly aktualizovány pro podporu specifikace Unicode 16.0.0.
- Byl přidán makro „_ISOC2Y_SOURCE“, které umožňuje aktivovat funkce definované v návrhu standardu C2Y. Tyto funkce lze také aktivovat pomocí makra _GNU_SOURCE a přes kompilátorové příznaky („gcc -std=gnu2y“).
- Byl implementován nástroj benchtest pro sledování výkonu různých funkcí (obvykle matematických).
- Byla přidána konfigurace glibc.rtld.execstack, která výslovně zakazuje použití spustitelného zásobníku.
- Byla přidána podpora rozšiřitelného ABI rseq (restartovatelné sekvence), který poskytuje mechanismus pro rychlé atomové provádění operací (v případě přerušení operace jiným vláknem se stav resetuje a provede se opětovný pokus o provedení). V nové verzi se objevila možnost využití v rseq rozšířených funkcí, které chyběly v původním ABI, jako jsou identifikátory paralelního provádění (mm_cid, ID souběžnosti mapování paměti) a identifikátory uzlů NUMA (node_id).
- Podpora portu pro big-endian systémy ARC (arceb-linux-gnu) byla ukončena.
- Byla odstraněna zranitelnost (CVE-2025-039), která vedla k přetečení zásobníku při provádění funkce assert(). K přetečení dochází při příliš velkém jménu programu (argv[0]). Problém je považován za bezpečnostně nezávažný, protože za hranici zásobníku se zapisuje 4 bajty, jejichž obsah útočník nemůže kontrolovat. Zajímavé je samotné zjištění existence zranitelnosti v ladících funkcích, která vzniká chybou při výstupu jména současné aplikace.
Zdroj: opennet.ru
