Po šesti měsících vývoje byla vydána nová verze systémové knihovny GNU C Library (glibc) 2.35, která plně vyhovuje standardům ISO C11 a POSIX.1-2017. Nová verze zahrnuje opravy od 66 vývojářů.
Mezi vylepšení, která byla realizována ve Glibc 2.35, patří:
- Byla přidána podpora místního nastavení „C.UTF-8“, které zahrnuje pravidla pro řazení všech Unicode kódů, ale pro úsporu místa je omezeno na použití ASCII rozsahů ve funkcích fnmatch, regexec a regcomp. Místní nastavení zabírá přibližně 400 KB, z čehož 346 KB tvoří data LC_CTYPE pro Unicode, a vyžaduje samostatnou instalaci (není součástí Glibc).
- Data kódování, informace o typech znaků a tabulky transliterace byly aktualizovány pro podporu specifikace Unicode 14.0.0.
- V
- V
- V
- Pro funkce exp10 byla do hlavičkového souboru přidána odpovídající makra, nezávislá na konkrétních typech.
- V byl přidán makro _PRINTF_NAN_LEN_MAX, navržené v návrhu standardu ISO C2X.
- Do rodiny funkcí printf byly přidány formátovací specifiátory „%b“ a „%B“ pro výstup celých čísel ve dvojkovém formátu.
- V systému dynamického propojování byl implementován nový algoritmus třídění DSO, který využívá metodu prohledávání do hloubky (DFS) k řešení problémů s výkonem při zpracování cyklických závislostí. Pro výběr algoritmu třídění DSO byl navržen parametr glibc.rtld.dynamic_sort, kterému lze přiřadit hodnotu „1“ pro návrat k starému algoritmu.
- Do ABI byla přidána podpora nové funkce ‘__memcmpeq’, používané kompilátory pro optimalizaci využití ‘memcmp’, pokud je vrácená hodnota této funkce použita pouze k ověření stavu dokončení operace.
- Byla přidána podpora automatické registrace vláken pomocí systémového volání rseq (restartable sequences), které je dostupné od jádra Linux 4.18. Systémové volání rseq umožňuje organizovat ne přerušované vykonávání skupiny instrukcí, které není přerušováno a potvrzuje výsledek poslední instrukce ve skupině. V podstatě se poskytuje prostředek pro velmi rychlé atomické provádění operací, které se v případě přerušení jiným vláknem vymazávají a pokus se provést znovu.
- Byl přidán symbolický odkaz /usr/bin/ld.so.
- Zajištěno výchozí sestavení všech spustitelných souborů vestavěných programů a testovací sady v režimu PIE (position independent executable). Pro vypnutí tohoto chování je k dispozici možnost ‘—disable-default-pie’.
- Pro Linux byla přidána konfigurace glibc.malloc.hugetlb, která umožňuje přepnout implementaci malloc na využívání systémového volání madvise s flagem MADV_HUGEPAGE pro mmap a sbrk nebo přímo používat velké stránky paměti prostřednictvím určení flagu MAP_HUGETLB v voláních mmap. V prvním případě je možné dosáhnout zvýšení výkonnosti, pokud Transparent Huge Pages běží v režimu madvise, v druhém případě se poskytuje možnost využít systémem rezervovaných velkých stránek (Huge Pages).
- Byla přidána funkce _dl_find_object, kterou je možné použít k přidání informací o rozbalení zásobníku volání (unwind).
- Byla přidána podpora architektury OpenRISC (or1k-linux-gnu) v režimu soft-float pro zpracování operací s plovoucí řádovou čárkou. Pro fungování portu jsou požadovány binutils 2.35, GCC 11 a jádro Linux 5.4.
- Byl přidán přepínač pro sestavení ‘—with-rtld-early-cflags’, pomocí kterého lze určit další přepínače kompilace používané při sestavování počátečního kódu pro dynamické spojování.
- Pro platformu Linux byla přidána funkce epoll_pwait2, která se od epoll_wait liší tím, že udává časový limit s nanosekundovou přesností.
- Byla přidána funkce posix_spawn_file_actions_addtcsetpgrp_np, která vylučuje stavy závodu při nastavování ovládacího terminálu pro nový proces.
- Pro aplikace kompilované s Glibc a GCC 12+ byl zaveden režim ochrany „_FORTIFY_SOURCE=3“, který odhaluje možné přetečení vyrovnávací paměti při provádění stringových funkcí definovaných v záhlaví string.h. Rozdíl od režimu „_FORTIFY_SOURCE=2“ spočívá v dalších kontrolách, které mohou potenciálně snižovat výkon.
- Byla ukončena podpora rozšíření Intel MPX (Memory Protection Extensions), používaných pro kontrolu ukazatelů na dodržování hranic oblastí paměti (tato technologie se neujala a byla již odstraněna z GCC a LLVM).
- Byl prohlášen za zastaralý a bude odstraněn v následující verzi mechanismus prelink a s ním související proměnné prostředí LD_TRACE_PRELINKING a LD_USE_LOAD_BIAS.
Opraveny zranitelnosti:
- CVE-2022-23218, CVE-2022-23219 — přetečení vyrovnávací paměti ve funkcích svcunix_create a clnt_create, způsobené kopírováním obsahu parametru s názvem souboru do zásobníku bez kontroly velikosti kopírovaných dat. Pro aplikace, které byly sestaveny bez ochrany zásobníku a používají protokol „unix“, může zranitelnost vést k provedení škodlivého kódu při zpracování velmi dlouhých názvů souborů.
- CVE-2021-3998 — zranitelnost ve funkci realpath(), způsobená vracením za určitých podmínek nesprávné hodnoty, která obsahuje nevyčištěná zbytková data ze zásobníku. Pro program SUID-root fusermount lze zranitelnost využít k získání důvěrných informací z paměti procesu, například k získání informací o ukazatelích.
- CVE-2021-3999 — jednojbytevé přetečení vyrovnávací paměti ve funkci getcwd(). Problém je způsoben chybou, která je přítomna od roku 1995. K vyvolání přetečení stačí provést v samostatném jmenném prostoru mount pointů volání chdir() pro adresář „/“.
Zdroj: opennet.ru
