ProHoster > Vydanie systémovej knižnice Glibc 2.31
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).