Izdanje sistemske biblioteke Glibc 2.31

Nakon šest mjeseci razvoja objavljeno izdanje sistemske biblioteke GNU C biblioteka (glibc) 2.31, koji je u potpunosti usklađen sa zahtjevima ISO C11 i POSIX.1-2008. Novo izdanje uključuje popravke od 58 programera.

Implementirano u Glibc 2.31 poboljšanja možete primetiti:

  • Dodan _ISOC2X_SOURCE makro za omogućavanje mogućnosti definisanih u nacrtu budućeg ISO standarda C2X. Ove karakteristike su takođe omogućene kada se koristi makro _GNU_SOURCE ili kada se gradi u gcc sa zastavicom “-std=gnu2x”;
  • Za funkcije definirane u datoteci zaglavlja "math.h" koje zaokružuju svoje rezultate na manji tip, odgovarajući makroi generičkog tipa su predloženi u datoteci "tgmath.h", kako to zahtijevaju specifikacije TS 18661-1:2014 i TS 18661-3: 2015;
  • Dodata funkcija pthread_clockjoin_np() koja čeka da se nit završi, uzimajući u obzir vremensko ograničenje (ako se istekne prije završetka, funkcija će vratiti grešku). Za razliku od pthread_timedjoin_np(), u pthread_clockjoin_np() moguće je definisati tip tajmera za izračunavanje timeouta - CLOCK_MONOTONIC (uzima u obzir vrijeme koje je sistem proveo u stanju mirovanja) ili CLOCK_REALTIME;
  • DNS resolver sada podržava opciju trust-ad u /etc/resolv.conf i RES_TRUSTAD zastavicu u _res.options, kada je postavljena, DNSSEC zastavica se prenosi u DNS zahtjevima AD (provjereni podaci). U ovom režimu, AD zastavica koju postavlja server postaje dostupna aplikacijama koje pozivaju funkcije kao što je res_search(). Podrazumevano, ako predložene opcije nisu postavljene, glibc ne navodi AD zastavicu u zahtevima i automatski je briše u odgovorima, ukazujući da nedostaju DNSSEC provere;
  • Izgradnja radnih veza sistemskih poziva za Glibc više ne zahtijeva instaliranje datoteka zaglavlja Linux kernela. Izuzetak je 64-bitna RISC-V arhitektura;
  • Eliminisano ranjivost CVE-2019-19126, što vam omogućava da zaobiđete zaštitu
    ASLR u programima sa setuid zastavicom i određuju raspored adresa u učitanim bibliotekama kroz manipulaciju LD_PREFER_MAP_32BIT_EXEC varijablom okruženja.

Promjene koje narušavaju kompatibilnost:

  • totalorder(), totalordermag() i slične funkcije za druge tipove s pomičnim zarezom sada prihvataju pokazivače kao argumente za eliminaciju upozorenja o pretvaranju vrijednosti u stanje NaN, u skladu sa preporukama TS 18661-1 predloženim za budući C2X standard.
    Postojeći izvršni fajlovi koji direktno prenose argumente sa pomičnim zarezom nastaviće da rade bez modifikacija;

  • Dugo zastarjela stime funkcija više nije dostupna za binarne datoteke povezane s glibc-om, a njena definicija je uklonjena iz time.h. Za postavljanje sistemskog vremena koristite funkciju clock_settime. U budućnosti planiramo da uklonimo zastarjelu funkciju ftime, kao i datoteku zaglavlja sys/timeb.h (trebalo bi koristiti gettimeofday ili clock_gettime umjesto ftime);
  • Funkcija gettimeofday više ne prenosi informacije o vremenskoj zoni na nivou sistema (ova karakteristika je bila relevantna u danima 4.2-BSD i bila je zastarela dugi niz godina). Argumentu 'tzp' sada treba proslijediti null pokazivač, a funkciju localtime() treba koristiti za dobivanje informacija o vremenskoj zoni na osnovu trenutnog vremena. Pozivanje gettimeofday sa argumentom koji nije nula 'tzp' će vratiti prazna polja tz_minuteswest i tz_dsttime u strukturi vremenske zone. Sama funkcija gettimeofday je zastarjela pod POSIX-om (clock_gettime se preporučuje umjesto gettimeofday), ali nema planova da se ona ukloni iz glibc-a;
  • settimeofday više ne podržava istovremeno prenošenje parametara za postavljanje vremena i pomaka koji ispravlja vrijeme. Prilikom pozivanja settimeofday, jedan od argumenata (vrijeme ili pomak) sada mora biti postavljen na null, inače poziv funkcije neće uspjeti s greškom EINVAL. Kao i gettimeofday, funkcija settimeofday je zastarjela u POSIX-u i preporučuje se da se zamijeni funkcijom clock_settime ili adjtime porodicom funkcija;
  • Podrška za SPARC ISA v7 arhitekturu je ukinuta (podrška v8 je za sada zadržana, ali samo za procesore koji podržavaju CAS instrukcije, kao što su LEON procesori, a ne SuperSPARC procesori).
  • Ako uparivanje ne uspije u "lenj", u kojem povezivač ne traži simbole funkcije do prvog poziva te funkcije, funkcija dlopen sada prisiljava proces da se prekine (prethodno vraća NULL u slučaju neuspjeha);
  • Za MIPS hard-float ABI, izvršni stek se sada koristi, osim ako izgradnja eksplicitno ne ograničava upotrebu Linux kernela 4.8+ preko parametra “-enable-kernel=4.8.0” (sa jezgrama do 4.8, rušenja su primećeno za neke MIPS konfiguracije);
  • Vezivanja oko sistemskih poziva koji se odnose na manipulaciju vremenom premještena su da koriste sistemski poziv time64, ako postoji (na 32-bitnim sistemima, glibc prvo pokušava nove sistemske pozive koji manipulišu 64-bitnim tipom vremena, a ako ih nema, pada nazad na stare 32-bitne pozive).

izvor: opennet.ru

Dodajte komentar