Vydanie systémovej knižnice Glibc 2.31

Po šiestich mesiacoch vývoja zverejnená vydanie systémovej knižnice Knižnica GNU C (glibc) 2.31, ktorý plne vyhovuje požiadavkám ISO C11 a POSIX.1-2008. Nové vydanie obsahuje opravy od 58 vývojárov.

Implementované v Glibc 2.31 vylepšenia môžete si všimnúť:

  • Pridané makro _ISOC2X_SOURCE na umožnenie funkcií definovaných v návrhu budúcej normy ISO C2X. Tieto funkcie sú povolené aj pri použití makra _GNU_SOURCE alebo pri zostavovaní gcc s príznakom „-std=gnu2x“;
  • Pre funkcie definované v hlavičkovom súbore "math.h", ktoré zaokrúhľujú svoje výsledky na menší typ, sú v súbore "tgmath.h" navrhnuté zodpovedajúce makrá všeobecného typu, ako to vyžadujú špecifikácie TS 18661-1:2014 a TS 18661-3: 2015;
  • Pridaná funkcia pthread_clockjoin_np(), ktorá čaká na dokončenie vlákna, pričom berie do úvahy časový limit (ak časový limit nastane pred dokončením, funkcia vráti chybu). Na rozdiel od pthread_timedjoin_np(), v pthread_clockjoin_np() je možné definovať typ časovača pre výpočet timeoutu - CLOCK_MONOTONIC (zohľadňuje čas strávený systémom v režime spánku) alebo CLOCK_REALTIME;
  • DNS resolver teraz podporuje možnosť trust-ad v /etc/resolv.conf a príznak RES_TRUSTAD v _res.options, ak je nastavený, príznak DNSSEC sa prenáša v požiadavkách DNS AD (overené údaje). V tomto režime sa príznak AD nastavený serverom sprístupní aplikáciám, ktoré volajú funkcie ako res_search(). V predvolenom nastavení, ak navrhované možnosti nie sú nastavené, glibc nešpecifikuje príznak AD v požiadavkách a automaticky ho vymaže v odpovediach, čo znamená, že chýbajú kontroly DNSSEC;
  • Vytváranie väzieb funkčných systémových volaní pre Glibc už nevyžaduje inštaláciu hlavičkových súborov jadra Linuxu. Výnimkou je 64-bitová architektúra RISC-V;
  • Eliminovaný zraniteľnosť CVE-2019 19126,, ktorá umožňuje obísť ochranu
    ASLR v programoch s príznakom setuid a určiť rozloženie adries v načítaných knižniciach manipuláciou s premennou prostredia LD_PREFER_MAP_32BIT_EXEC.

Zmeny, ktoré narúšajú kompatibilitu:

  • totalorder(), totalordermag() a podobné funkcie pre iné typy s pohyblivou rádovou čiarkou teraz akceptujú ukazovatele ako argumenty na odstránenie upozornení na prevod hodnôt v stave Nan, v súlade s odporúčaniami TS 18661-1 navrhnutými pre budúci štandard C2X.
    Existujúce spustiteľné súbory, ktoré priamo odovzdávajú argumenty s pohyblivou rádovou čiarkou, budú naďalej bežať bez úprav;

  • Dlho zavrhovaná funkcia stime už nie je dostupná pre binárne súbory prepojené s glibc a jej definícia bola odstránená z time.h. Na nastavenie systémového času použite funkciu clock_settime. V budúcnosti plánujeme odstrániť zastaranú funkciu ftime, ako aj hlavičkový súbor sys/timeb.h (namiesto ftime by sa malo použiť gettimeofday alebo clock_gettime);
  • Funkcia gettimeofday už neprenáša informácie o celosystémovom časovom pásme (táto funkcia bola relevantná v dňoch 4.2-BSD a už mnoho rokov bola zastaraná). Argument 'tzp' by mal byť teraz odovzdaný ako nulový ukazovateľ a funkcia localtime() by sa mala použiť na získanie informácií o časovom pásme na základe aktuálneho času. Volanie gettimeofday s nenulovým argumentom 'tzp' vráti prázdne polia tz_minuteswest a tz_dsttime v štruktúre časového pásma. Samotná funkcia gettimeofday je v POSIX zastaraná (odporúča sa clock_gettime namiesto gettimeofday), ale neplánujeme ju odstrániť z glibc;
  • settimeofday už nepodporuje súčasné odovzdávanie parametrov pre nastavenie času a korekcie času. Pri volaní settimeofday musí byť teraz jeden z argumentov (čas alebo posun) nastavený na hodnotu null, inak volanie funkcie zlyhá s chybou EINVAL. Podobne ako gettimeofday je funkcia settimeofday zastaraná v POSIX a odporúča sa ju nahradiť funkciou clock_settime alebo rodinou funkcií adjtime;
  • Podpora pre architektúru SPARC ISA v7 bola ukončená (podpora v8 je zatiaľ zachovaná, ale len pre procesory, ktoré podporujú inštrukcie CAS, ako sú procesory LEON, nie procesory SuperSPARC).
  • Ak párovanie zlyhá v "lenivý", v ktorom linker nehľadá symboly funkcie až do prvého volania tejto funkcie, funkcia dlopen teraz vynúti ukončenie procesu (predtým pri zlyhaní vracia NULL);
  • Pre MIPS hard-float ABI sa teraz používa spustiteľný zásobník, pokiaľ zostava výslovne neobmedzuje použitie linuxového jadra 4.8+ prostredníctvom parametra „-enable-kernel=4.8.0“ (pri jadrách do 4.8 dochádza k zlyhaniam pozorované pre niektoré konfigurácie MIPS);
  • Väzby okolo systémových volaní súvisiacich s manipuláciou s časom boli presunuté tak, aby používali systémové volanie time64, ak existuje (na 32-bitových systémoch glibc najskôr vyskúša nové systémové volania, ktoré manipulujú so 64-bitovým typom času, a ak žiadne neexistujú, spadne späť k starým 32-bitovým volaniam).

Zdroj: opennet.ru

Pridať komentár