Vydání systémové knihovny Glibc 2.31

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

Z implementovaných v Glibc 2.31 vylepšení můžeme zmínit:

  • Byl přidán makro _ISOC2X_SOURCE pro zahrnutí funkcí definovaných v návrhové verzi budoucí normy ISO C2X. Tyto funkce jsou také zahrnuty při použití makra _GNU_SOURCE nebo při sestavení v gcc s přepínačem „-std=gnu2x“;
  • Pro funkce definované v hlavičkovém souboru „math.h“, které zaokrouhlují své výsledky na typ menší velikosti, byly v souboru „tgmath.h“ navrhnuty odpovídající makra obecného typu, jak vyžadují specifikace TS 18661-1:2014 a TS 18661-3:2015;
  • Byla přidána funkce pthread_clockjoin_np(), která čeká na dokončení vlákna s ohledem na časový limit (pokud vyprší časový limit před dokončením, funkce vrátí chybu). Na rozdíl od pthread_timedjoin_np(), v pthread_clockjoin_np() je povoleno definování typu časovače pro výpočet časového limitu — CLOCK_MONOTONIC (zohledňující čas strávený systémem v režimu spánku) nebo CLOCK_REALTIME;
  • Do DNS resolveru byla přidána podpora volby trust-ad v /etc/resolv.conf a příznaku RES_TRUSTAD v _res.options, kterými se při DNS dotazech provádí předávání příznaku DNSSEC AD (ověřená data). V tomto režimu je nastavovaný příznak AD serverem dostupný aplikacím, které volají funkce jako res_search(). Ve výchozím nastavení, pokud nejsou navrženy uvedené volby, glibc nepředává příznak AD v dotazech a automaticky jej čistí v odpovědích, což naznačuje, že DNSSEC není ověřen;
  • Pro sestavení fungujících obalů systémových volání pro Glibc již není nutná instalace hlavičkových souborů jádra Linux. Výjimku tvoří 64bitová architektura RISC-V;
  • Odstraněna zranitelnost CVE-2019-19126, která umožňuje obejít ochranu
    ASLR v programech s příznakem setuid a určit rozložení adres v načítaných knihovnách manipulací s proměnnou prostředí LD_PREFER_MAP_32BIT_EXEC.

Změny, které narušují kompatibilitu:

  • V totalorder(), totalordermag() a podobných funkcích pro jiné typy s plovoucí řádovou čárkou nyní přijímají jako argumenty ukazatele, aby se vyloučila varování o konverzních hodnotách ve stavu NaN, v souladu s doporučeními TS 18661-1, navrženými pro budoucí normu C2X.
    Existující spustitelné soubory, ve kterých jsou argumenty s plovoucí řádovou čárkou předávány přímo, budou i nadále fungovat bez změn;
  • Dávno avizovaná zastaralá funkce stime je nyní pro binární soubory spojené s glibc nedostupná a její definice byla odstraněna z time.h. Pro nastavení systémového času by měla být použita funkce clock_settime. V budoucnu se plánuje odstranit také funkci ftime, která je označena jako zastaralá, a hlavičkový soubor sys/timeb.h (místo ftime by se měla používat funkce gettimeofday nebo clock_gettime);
  • Funkce gettimeofday nyní nepředává informace o globálním časovém pásmu (tato možnost byla aktuální v době 4.2-BSD a byla mnoho let označena za zastaralou). V argumentu 'tzp' by se nyní měl předat nulový ukazatel, a pro získání informací o časovém pásmu vázaných na aktuální čas by měla být použita funkce localtime(). Při volání gettimeofday s nenulovým argumentem 'tzp' budou vrácena prázdná pole tz_minuteswest a tz_dsttime ve struktuře timezone. Samotná funkce gettimeofday je považována za zastaralou v POSIX (místo gettimeofday se doporučuje používat clock_gettime), ale její odstranění z glibc není plánováno;
  • Ve funkci settimeofday byla zastavena podpora současného předání parametrů pro nastavení času a korekce časového posunu. Při volání settimeofday musí být jeden z argumentů (čas nebo posun) nyní povinně nastaven na hodnotu null, jinak bude volání funkce dokončeno chybou EINVAL. Stejně jako gettimeofday je funkce settimeofday považována za zastaralou v POSIX a místo ní se doporučuje použít funkci clock_settime nebo rodinu funkcí adjtime;
  • Podpora architektury SPARC ISA v7 byla ukončena (podpora v8 zatím zachována, ale pouze pro procesory s podporou instrukcí CAS, jako jsou procesory LEON, ale nikoli procesory SuperSPARC).
  • V případě chyby při vazbě v režimu „lazy„, kdy linker neprovádí hledání symbolů funkce do prvního zavolání této funkce, nyní funkce dlopen násilně ukončuje provádění procesu (dříve byla při chybě vracena NULL);
  • Pro ABI MIPS hard-float je nyní používán spouštěcí zásobník, pokud při sestavení není výslovně stanoveno omezení na použití jádra Linux 4.8+ pomocí parametru „—enable-kernel=4.8.0“ (s jádry do 4.8 docházelo k chybám u některých konfigurací MIPS);
  • Obalové vrstvy nad systémovými voláními spojenými s manipulací s časem byly převedeny na použití systémového volání time64, pokud je k dispozici (na 32-bitových systémech se glibc nejprve pokouší použít nová systémová volání manipulující s 64-bitovým typem pro čas, a pokud nejsou dostupná, přechází na stará 32-bitová volání).

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster