Vydání systémové knihovny Glibc 2.31

Po šesti měsících vývoje publikováno vydání systémové knihovny Knihovna GNU C (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 těch implementovaných v Glibc 2.31 vylepšení můžete si všimnout:

  • Přidáno makro _ISOC2X_SOURCE umožňující funkce definované v návrhu budoucí normy ISO C2X. Tyto funkce jsou také povoleny při použití makra _GNU_SOURCE nebo při sestavování gcc s příznakem „-std=gnu2x“;
  • Pro funkce definované v záhlaví souboru "math.h", které zaokrouhlují své výsledky na menší typ, jsou v souboru "tgmath.h" navržena odpovídající makra obecného typu, jak to vyžadují specifikace TS 18661-1:2014 a TS 18661-3: 2015;
  • Přidána funkce pthread_clockjoin_np(), která čeká na dokončení vlákna s ohledem na časový limit (pokud časový limit nastane před dokončením, funkce vrátí chybu). Na rozdíl od pthread_timedjoin_np(), v pthread_clockjoin_np() je možné definovat typ časovače pro výpočet timeoutu - CLOCK_MONOTONIC (zohledňuje čas strávený systémem v režimu spánku) nebo CLOCK_REALTIME;
  • Překladač DNS nyní podporuje volbu trust-ad v /etc/resolv.conf a příznak RES_TRUSTAD v _res.options, pokud je nastaven, příznak DNSSEC se přenáší v požadavcích DNS AD (ověřená data). V tomto režimu je příznak AD nastavený serverem dostupný pro aplikace, které volají funkce jako res_search(). Ve výchozím nastavení, pokud navrhované možnosti nejsou nastaveny, glibc neurčuje příznak AD v požadavcích a automaticky jej vymaže v odpovědích, což znamená, že chybí kontroly DNSSEC;
  • Vytváření funkčních vazeb systémových volání pro Glibc již nevyžaduje instalaci hlaviček linuxového jádra. Výjimkou je 64bitová architektura RISC-V;
  • Vyřazeno 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čtených knihovnách pomocí manipulace s proměnnou prostředí LD_PREFER_MAP_32BIT_EXEC.

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

  • totalorder(), totalordermag() a podobné funkce pro další typy s plovoucí desetinnou čárkou nyní akceptují ukazatele jako argumenty pro odstranění varování o převodu hodnot ve stavu NaN, v souladu s doporučeními TS 18661-1 navrženými pro budoucí standard C2X.
    Stávající spustitelné soubory, které přímo předávají argumenty s plovoucí desetinnou čárkou, budou nadále běžet bez úprav;

  • Dlouho zastaralá funkce stime již není dostupná pro binární soubory propojené s glibc a její definice byla odstraněna z time.h. Chcete-li nastavit systémový čas, použijte funkci clock_settime. V budoucnu plánujeme odstranit zastaralou funkci ftime a také hlavičkový soubor sys/timeb.h (místo ftime by měl být použit gettimeofday nebo clock_gettime);
  • Funkce gettimeofday již nepředává informace o systémovém časovém pásmu (tato funkce byla relevantní ve dnech 4.2-BSD a byla již mnoho let zastaralá). Argumentu 'tzp' by nyní měl být předán nulový ukazatel a k získání informací o časovém pásmu na základě aktuálního času by měla být použita funkce localtime(). Volání gettimeofday s nenulovým argumentem 'tzp' vrátí prázdná pole tz_minuteswest a tz_dsttime ve struktuře časového pásma. Samotná funkce gettimeofday je v POSIX zastaralá (doporučuje se clock_gettime místo gettimeofday), ale neplánuje se její odstranění z glibc;
  • settimeofday již nepodporuje současné předávání parametrů pro nastavení času a offsetu pro korekci času. Při volání settimeofday musí být nyní jeden z argumentů (čas nebo offset) nastaven na hodnotu null, jinak volání funkce selže s chybou EINVAL. Stejně jako gettimeofday je funkce settimeofday v POSIX zastaralá a doporučuje se ji nahradit funkcí clock_settime nebo rodinou funkcí adjtime;
  • Podpora architektury SPARC ISA v7 byla ukončena (podpora v8 je prozatím zachována, ale pouze pro procesory, které podporují instrukce CAS, jako jsou procesory LEON, nikoli procesory SuperSPARC).
  • Pokud se párování nezdaří v "líný", ve kterém linker nehledá symboly funkce až do prvního volání této funkce, funkce dlopen nyní vynutí ukončení procesu (dříve vracela NULL při selhání);
  • Pro MIPS hard-float ABI se nyní používá spustitelný zásobník, pokud sestavení výslovně neomezuje použití linuxového jádra 4.8+ pomocí parametru „-enable-kernel=4.8.0“ (u jader do 4.8 dochází k pádům pozorované u některých konfigurací MIPS);
  • Vazby kolem systémových volání souvisejících s manipulací s časem byly přesunuty tak, aby používaly systémové volání time64, pokud existuje (na 32bitových systémech glibc nejprve zkouší nová systémová volání, která manipulují s 64bitovým typem času, a pokud žádná neexistují, spadne zpět ke starým 32bitovým voláním).

Zdroj: opennet.ru

Přidat komentář