Glibc 2.31 süsteemiteegi väljalase

Pärast kuuekuulist arengut avaldatud süsteemiteegi väljalase GNU C raamatukogu (glibc) 2.31, mis vastab täielikult ISO C11 ja POSIX.1-2008 standardite nõuetele. Uus väljalase sisaldab parandusi 58 arendajalt.

Nendest, mis on rakendatud versioonis Glibc 2.31 täiustused võite märkida:

  • Lisatud _ISOC2X_SOURCE makro, et võimaldada tulevase ISO standardi kavandis määratletud võimalusi C2X. Need funktsioonid on lubatud ka makro _GNU_SOURCE kasutamisel või gcc-s koostamisel lipuga "-std=gnu2x";
  • Päisefailis "math.h" määratletud funktsioonide jaoks, mille tulemused ümardatakse väiksema tüübini, pakutakse failis "tgmath.h" vastavad üldised tüüpi makrod, nagu nõuavad spetsifikatsioonid TS 18661-1:2014 ja TS 18661-3: 2015;
  • Lisatud on funktsioon pthread_clockjoin_np(), mis ootab lõime lõppu, võttes arvesse ajalõpu (kui timeout tekib enne lõpetamist, tagastab funktsioon veateate). Erinevalt pthread_timedjoin_np(), pthread_clockjoin_np()-s on võimalik määrata taimeri tüüp ajalõpu arvutamiseks - CLOCK_MONOTONIC (arvestab süsteemi unerežiimis viibitud aega) või CLOCK_REALTIME;
  • DNS-i lahendaja toetab nüüd failis /etc/resolv.conf suvandit trust-ad ja failis _res.options lippu RES_TRUSTAD, kui see on määratud, edastatakse DNSSEC-lipp DNS-i päringutes AD (autenteeritud andmed). Selles režiimis muutub serveri määratud AD lipp kättesaadavaks rakendustele, mis kutsuvad välja selliseid funktsioone nagu res_search(). Vaikimisi, kui soovitatud suvandid pole määratud, ei määra glibc päringutes AD lippu ja tühjendab selle automaatselt vastustes, näidates, et DNSSEC-i kontrollid puuduvad;
  • Glibci jaoks toimivate süsteemikutsete sidumiste loomine ei nõua enam Linuxi kerneli päisefailide installimist. Erandiks on 64-bitine RISC-V arhitektuur;
  • Elimineeritud haavatavus CVE-2019-19126, mis võimaldab teil kaitsest mööda minna
    ASLR programmides lipuga setuid ja määrata aadressi paigutus laaditud teekides keskkonnamuutuja LD_PREFER_MAP_32BIT_EXEC manipuleerimise teel.

Ühilduvust rikkuvad muudatused:

  • totalorder(), totalordermag() ja sarnased funktsioonid muude ujukoma tüüpide jaoks aktsepteerivad nüüd viiteid argumentidena, et kõrvaldada hoiatused oleku väärtuste teisendamise kohta NaN, vastavalt tulevase C18661X standardi TS 1-2 soovitustele.
    Olemasolevad käivitatavad failid, mis edastavad otse ujukomaga argumente, jätkavad töötamist ilma muutmiseta;

  • Kaua aegunud stime funktsioon pole glibc-lingiga binaarfailide jaoks enam saadaval ja selle definitsioon on failist time.h eemaldatud. Süsteemi aja määramiseks kasutage funktsiooni clock_settime. Tulevikus plaanime eemaldada aegunud funktsiooni ftime, samuti päisefaili sys/timeb.h (ftime asemel tuleks kasutada gettimeofday või clock_gettime);
  • Funktsioon gettimeofday ei edasta enam teavet kogu süsteemi ajavööndi kohta (see funktsioon oli asjakohane 4.2-BSD päevil ja seda on juba aastaid kasutatud). Argumendile 'tzp' tuleks nüüd anda üle nullkursor ja praegusel kellaajal põhineva ajavööndi teabe hankimiseks tuleks kasutada funktsiooni localtime(). Gettimeofday kutsumine nullist erineva argumendiga 'tzp' tagastab ajavööndi struktuuris tühjad väljad tz_minuteswest ja tz_dsttime. Funktsioon gettimeofday ise on POSIX-i all aegunud (gettimeofday asemel on soovitatav kasutada kella_gettime), kuid pole plaanis seda glibc-st eemaldada;
  • settimeofday ei toeta enam kellaaja seadistamise ja aja korrigeerimise nihke parameetrite samaaegset edastamist. Settimeofday väljakutsumisel tuleb nüüd üks argumentidest (aeg või nihe) määrata nulliks, vastasel juhul ebaõnnestub funktsiooni kutsumine EINVAL veaga. Sarnaselt gettimeofdayga on funktsioon settimeofday POSIXis aegunud ja see on soovitatav asendada funktsiooniga clock_settime või funktsioonide perekonnaga adjtime;
  • SPARC ISA v7 arhitektuuri tugi on lõpetatud (v8 tugi on praegu säilinud, kuid ainult protsessoritele, mis toetavad CAS-i käske, näiteks LEON protsessorid, mitte SuperSPARC protsessorid).
  • Kui sidumine ebaõnnestub "laisk", milles linker ei otsi funktsiooni sümboleid enne selle funktsiooni esimest kutset, sunnib funktsioon dlopen nüüd protsessi lõpetama (varem tagastab tõrke korral NULL-i);
  • MIPS-i hard-float ABI puhul kasutatakse nüüd käivitatavat pinu, välja arvatud juhul, kui järg ei piira selgelt Linuxi kerneli 4.8+ kasutamist parameetri "-enable-kernel=4.8.0" kaudu (kuni 4.8 tuumade korral on kokkujooksmised teatud MIPS-i konfiguratsioonide puhul);
  • Ajaga manipuleerimisega seotud süsteemikutsete ümber olevad sidemed on teisaldatud time64 süsteemikutsele, kui see on olemas (32-bitistes süsteemides proovib glibc esmalt uusi süsteemikutseid, mis manipuleerivad 64-bitise ajatüübiga ja kui neid pole, siis kukub tagasi vanade 32-bitiste kõnede juurde).

Allikas: opennet.ru

Lisa kommentaar