Izdaja sistemske knjižnice Glibc 2.31

Po šestih mesecih razvoja objavljeno izdaja sistemske knjižnice Knjižnica GNU C (glibc) 2.31, ki v celoti ustreza zahtevam standardov ISO C11 in POSIX.1-2008. Nova izdaja vključuje popravke 58 razvijalcev.

Od tistih, implementiranih v Glibc 2.31 izboljšave lahko opazite:

  • Dodan makro _ISOC2X_SOURCE za omogočanje zmogljivosti, opredeljenih v osnutku prihodnjega standarda ISO C2X. Te funkcije so omogočene tudi pri uporabi makra _GNU_SOURCE ali pri gradnji v gcc z zastavico “-std=gnu2x”;
  • Za funkcije, definirane v datoteki glave "math.h", ki svoje rezultate zaokrožujejo na manjši tip, so v datoteki "tgmath.h" predlagani ustrezni generični makri tipa, kot zahtevata specifikaciji TS 18661-1:2014 in TS 18661-3: 2015;
  • Dodana funkcija pthread_clockjoin_np(), ki čaka na dokončanje niti ob upoštevanju časovne omejitve (če časovna omejitev nastopi pred zaključkom, bo funkcija vrnila napako). Za razliko od pthread_timedjoin_np(), v pthread_clockjoin_np() je mogoče določiti vrsto časovnika za izračun časovne omejitve - CLOCK_MONOTONIC (upošteva čas, ki ga sistem preživi v načinu mirovanja) ali CLOCK_REALTIME;
  • Reševalec DNS zdaj podpira možnost zaupanja v oglas v /etc/resolv.conf in zastavo RES_TRUSTAD v _res.options, ko je nastavljena, se zastavica DNSSEC prenaša v zahtevah DNS AD (preverjeni podatki). V tem načinu postane zastavica AD, ki jo nastavi strežnik, na voljo aplikacijam, ki kličejo funkcije, kot je res_search(). Če predlagane možnosti niso nastavljene, glibc privzeto ne določi zastavice AD ​​v zahtevah in jo samodejno počisti v odgovorih, kar nakazuje, da manjkajo preverjanja DNSSEC;
  • Gradnja delujočih sistemskih klicnih vezav za Glibc ne zahteva več namestitve datotek glave jedra Linuxa. Izjema je 64-bitna arhitektura RISC-V;
  • Odpravljeno ranljivost CVE-2019-19126, ki vam omogoča, da zaobidete zaščito
    ASLR v programih z zastavico setuid in določanje postavitve naslova v naloženih knjižnicah z manipulacijo okoljske spremenljivke LD_PREFER_MAP_32BIT_EXEC.

Spremembe, ki motijo ​​združljivost:

  • totalorder(), totalordermag() in podobne funkcije za druge tipe s plavajočo vejico zdaj sprejemajo kazalce kot argumente za odpravo opozoril o pretvorbi vrednosti v stanju NaN, v skladu s priporočili TS 18661-1, predlaganimi za prihodnji standard C2X.
    Obstoječe izvedljive datoteke, ki posredujejo argumente s plavajočo vejico neposredno, se bodo še naprej izvajale brez sprememb;

  • Dolgo zastarela funkcija stime ni več na voljo za binarne datoteke, povezane z glibc, njena definicija pa je bila odstranjena iz time.h. Za nastavitev sistemskega časa uporabite funkcijo clock_settime. V prihodnosti nameravamo odstraniti zastarelo funkcijo ftime, kot tudi datoteko glave sys/timeb.h (namesto ftime je treba uporabiti gettimeofday ali clock_gettime);
  • Funkcija gettimeofday ne posreduje več informacij o časovnem pasu celotnega sistema (ta funkcija je bila pomembna v dneh 4.2-BSD in je bila več let opuščena). Argumentu 'tzp' je zdaj treba posredovati ničelni kazalec, funkcijo localtime() pa je treba uporabiti za pridobitev informacij o časovnem pasu na podlagi trenutnega časa. Klic gettimeofday z neničelnim argumentom 'tzp' bo vrnil prazni polji tz_minuteswest in tz_dsttime v strukturi časovnega pasu. Sama funkcija gettimeofday je zastarela pod POSIX (priporoča se clock_gettime namesto gettimeofday), vendar ni načrtov za njeno odstranitev iz glibc;
  • settimeofday ne podpira več hkratnega posredovanja parametrov za nastavitev časa in odmika za korekcijo časa. Pri klicu settimeofday mora biti eden od argumentov (čas ali odmik) zdaj nastavljen na nič, sicer bo klic funkcije neuspešen z napako EINVAL. Tako kot gettimeofday je funkcija settimeofday v POSIX-u opuščena in jo je priporočljivo nadomestiti s funkcijo clock_settime ali družino funkcij adjtime;
  • Podpora za arhitekturo SPARC ISA v7 je bila ukinjena (podpora za v8 je za zdaj ohranjena, vendar le za procesorje, ki podpirajo navodila CAS, kot so procesorji LEON, ne procesorji SuperSPARC).
  • Če seznanjanje ne uspe v "leni", v katerem povezovalec ne išče simbolov funkcije do prvega klica te funkcije, funkcija dlopen zdaj prisili, da se proces prekine (prej vrne NULL ob napaki);
  • Za MIPS hard-float ABI se zdaj uporablja sklad izvršljivih datotek, razen če zgradba izrecno omejuje uporabo jedra Linuxa 4.8+ prek parametra »-enable-kernel=4.8.0« (pri jedrih do 4.8 so zrušitve opaženo pri nekaterih konfiguracijah MIPS);
  • Vezave okoli sistemskih klicev, povezanih s časovno manipulacijo, so bile premaknjene tako, da uporabljajo sistemski klic time64, če je prisoten (v 32-bitnih sistemih glibc najprej poskusi nove sistemske klice, ki manipulirajo s 64-bitnim časovnim tipom, in če jih ni, pade nazaj na stare 32-bitne klice).

Vir: opennet.ru

Dodaj komentar