Vydání systémové knihovny Glibc 2.35

Po šesti měsících vývoje byla vydána systémová knihovna GNU C Library (glibc) 2.35, která plně vyhovuje požadavkům norem ISO C11 a POSIX.1-2017. Nová verze obsahuje opravy od 66 vývojářů.

Některá vylepšení implementovaná v Glibc 2.35 zahrnují:

  • Přidána podpora pro národní prostředí "C.UTF-8", které zahrnuje pravidla řazení pro všechny kódy Unicode, ale z důvodu úspory místa je omezeno na použití rozsahů ASCII ve funkcích fnmatch, regexec a regcomp. Národní prostředí má přibližně 400 KB, z čehož 346 KB tvoří data LC_CTYPE pro Unicode, a vyžaduje samostatnou instalaci (není integrovanou v Glibc).
  • Data kódování, informace o typu znaků a transliterační tabulky byly aktualizovány, aby podporovaly specifikaci Unicode 14.0.0.
  • a implementují funkce a makra, která zaokrouhlí výsledek na užší typ: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfMafx, fMxsqrtfMafx, fMxsqrtfMafx, fMxfmafNx. Funkce jsou popsány ve specifikacích TS 18661-1:2014, TS 18661-3:2015 a doplněny do návrhu budoucí normy ISO C2X C.
  • a implementují funkce a makra pro nalezení minima a maxima float, long double, _FloatN a _FloatNx čísel s pohyblivou řádovou čárkou, popsané ve specifikaci IEEE 754-2019 a přidané do návrhu budoucnosti Norma ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • Do byly přidány konstanty pro čísla s plovoucí desetinnou čárkou s jednoduchou přesností: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRT_QRTPIf, M_2_SQRT1QRTPIf, M_2_SQRTXNUMXQRTPIf.
  • Pro funkce exp10 byla do hlavičkového souboru přidána odpovídající makra, která nejsou vázána na konkrétní typy.
  • Do bylo přidáno makro _PRINTF_NAN_LEN_MAX navržené v návrhu normy ISO C2X.
  • Do rodiny funkcí printf byly přidány specifikátory formátu "%b" a "%B" pro tisk celých čísel v binární reprezentaci.
  • Systém dynamického propojování implementuje nový třídicí algoritmus DSO, který využívá hloubkové vyhledávání (DFS) k řešení problémů s výkonem při zpracování závislostí ve smyčce. Pro výběr třídícího algoritmu DSO je navržen parametr glibc.rtld.dynamic_sort, který lze nastavit na „1“ pro návrat ke starému algoritmu.
  • ABI přidalo podporu pro novou funkci '__memcmpeq', kterou používají kompilátory k optimalizaci použití 'memcmp', pokud se hodnota vrácená touto funkcí používá pouze ke kontrole stavu dokončení operace.
  • Přidána podpora pro automatickou registraci vláken pomocí systémového volání rseq (restartovatelné sekvence) poskytované od jádra Linuxu 4.18. Systémové volání rseq umožňuje organizovat nepřetržité provádění skupiny instrukcí, které není přerušeno a potvrzuje výsledek poslední instrukcí ve skupině. V podstatě poskytuje prostředek pro velmi rychlé atomické provádění operací, které, pokud jsou přerušeny jiným vláknem, jsou vyčištěny a opakovány.
  • Přidán symbolický odkaz /usr/bin/ld.so.
  • K dispozici je výchozí sestavení všech spustitelných souborů vestavěných programů a testovací sada v režimu PIE (spustitelný soubor nezávislý na pozici). Chcete-li toto chování zakázat, je k dispozici možnost „--disable-default-pie“.
  • Pro Linux bylo přidáno nastavení glibc.malloc.hugetlb, které umožňuje přepnout implementaci malloc tak, aby používala systémové volání madvise s příznakem MADV_HUGEPAGE pro mmap a sbrk, nebo přímo používala velké paměťové stránky zadáním příznaku MAP_HUGETLB v mmap hovory. V prvním případě lze dosáhnout zvýšení výkonu, pokud se transparentní obrovské stránky používají v režimu šílenství, a ve druhém případě je poskytována možnost používat systémem rezervované obrovské stránky.
  • Přidána funkce _dl_find_object, kterou lze použít k přidání informací o uvolnění zásobníku volání.
  • Přidána podpora pro architekturu OpenRISC (nebo 1k-linux-gnu) v režimu soft-float. Port vyžaduje binutils 2.35, GCC 11 a Linux kernel 5.4.
  • Přidán příznak sestavení "--with-rtld-early-cflags", který lze použít k určení dalších příznaků kompilace používaných při vytváření 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ší určením časového limitu s přesností na nanosekundy.
  • Přidána funkce posix_spawn_file_actions_addtcsetpgrp_np pro eliminaci podmínek závodu při nastavování řídicího terminálu pro nový proces.
  • Pro aplikace kompilované s Glibc a GCC 12+ je implementován ochranný režim „_FORTIFY_SOURCE=3“, který detekuje možné přetečení vyrovnávací paměti při provádění řetězcových funkcí definovaných v hlavičkovém souboru string.h. Rozdíl oproti režimu „_FORTIFY_SOURCE=2“ spočívá v dalších kontrolách, které mohou potenciálně vést ke snížení výkonu.
  • Podpora Intel MPX (Memory Protection Extensions), která se používá ke kontrole ukazatelů na hranice paměti, byla ukončena (tato technologie se nerozšířila a již byla odstraněna z GCC a LLVM).
  • Mechanismus předběžného propojení a jeho přidružené proměnné prostředí LD_TRACE_PRELINKING a LD_USE_LOAD_BIAS byly zastaralé a v budoucí verzi budou odstraněny.

    Opravené chyby zabezpečení:

    • CVE-2022-23218, CVE-2022-23219 – Přetečení vyrovnávací paměti ve funkcích svcunix_create a clnt_create způsobené zkopírováním obsahu parametru názvu souboru do zásobníku bez kontroly velikosti zkopírovaných dat. U aplikací vytvořených bez ochrany zásobníku a používajících „unix“ protokol může zranitelnost vést ke spuštění kódu útočníka při zpracování velmi dlouhých názvů souborů.
    • CVE-2021-3998 je zranitelnost ve funkci realpath() kvůli vracení za určitých podmínek nesprávné hodnoty obsahující nevyčištěná zbytková data ze zásobníku. U programu SUID-root fusermount lze zranitelnost použít k získání citlivých informací z paměti procesu, například k získání informací o ukazatelích.
    • CVE-2021-3999 - Jednobajtové přetečení vyrovnávací paměti ve funkci getcwd(). Problém je způsoben chybou, která se vyskytuje od roku 1995. Chcete-li způsobit přetečení, jednoduše zavolejte chdir() v adresáři "/" v samostatném jmenném prostoru přípojného bodu.

    Zdroj: opennet.ru

Přidat komentář