Lansarea bibliotecii de sistem Glibc 2.31

După șase luni de dezvoltare publicat lansarea bibliotecii de sistem Biblioteca GNU C (glibc) 2.31, care respectă pe deplin cerințele standardelor ISO C11 și POSIX.1-2008. Noua versiune include remedieri de la 58 de dezvoltatori.

Din cele implementate în Glibc 2.31 îmbunătățiri puteți nota:

  • S-a adăugat macrocomanda _ISOC2X_SOURCE pentru a activa capabilitățile definite în proiectul viitorului standard ISO C2X. Aceste caracteristici sunt, de asemenea, activate atunci când utilizați macrocomandă _GNU_SOURCE sau când construiți în gcc cu indicatorul „-std=gnu2x”;
  • Pentru funcțiile definite în fișierul antet „math.h” care își rotunjesc rezultatele la un tip mai mic, macrocomenzile de tip generic corespunzătoare sunt propuse în fișierul „tgmath.h”, așa cum este cerut de specificațiile TS 18661-1:2014 și TS 18661-3: 2015;
  • S-a adăugat funcția pthread_clockjoin_np(), care așteaptă finalizarea firului de execuție, ținând cont de timeout (dacă timeout-ul are loc înainte de finalizare, funcția va returna o eroare). Spre deosebire de pthread_timedjoin_np(), în pthread_clockjoin_np() este posibil să se definească tipul de cronometru pentru calcularea timeout-ului - CLOCK_MONOTONIC (ține cont de timpul petrecut de sistem în modul sleep) sau CLOCK_REALTIME;
  • Resolverul DNS acceptă acum opțiunea trust-ad în /etc/resolv.conf și steag-ul RES_TRUSTAD în _res.options, când este setat, steag-ul DNSSEC este transmis în cererile DNS AD (date autentificate). În acest mod, flag-ul AD setat de server devine disponibil pentru aplicațiile care apelează funcții precum res_search(). În mod implicit, dacă opțiunile sugerate nu sunt setate, glibc nu specifică marcajul AD în cereri și îl șterge automat în răspunsuri, indicând faptul că verificările DNSSEC lipsesc;
  • Crearea de legături de apel de sistem funcționale pentru Glibc nu mai necesită instalarea fișierelor de antet kernel-ului Linux. Excepția este arhitectura RISC-V pe 64 de biți;
  • Eliminat vulnerabilitate CVE-2019-19126, care vă permite să ocoliți protecția
    ASLR în programele cu steag setuid și determinați aspectul adresei în bibliotecile încărcate prin manipularea variabilei de mediu LD_PREFER_MAP_32BIT_EXEC.

Modificări care întrerup compatibilitatea:

  • totalorder(), totalordermag() și funcții similare pentru alte tipuri de virgulă mobilă acceptă acum pointeri ca argumente pentru a elimina avertismentele despre conversia valorilor în stare NaN, în conformitate cu recomandările TS 18661-1 propuse pentru viitorul standard C2X.
    Executabilele existente care trec direct argumente în virgulă mobilă vor continua să ruleze fără modificări;

  • Funcția stime de mult timp depreciată nu mai este disponibilă pentru binarele legate de glibc, iar definiția sa a fost eliminată din time.h. Pentru a seta ora sistemului, utilizați funcția clock_settime. În viitor, intenționăm să eliminăm funcția ftime depreciată, precum și fișierul antet sys/timeb.h (gettimeofday sau clock_gettime ar trebui să fie folosite în loc de ftime);
  • Funcția gettimeofday nu mai transmite informații despre fusul orar la nivel de sistem (această caracteristică era relevantă în zilele 4.2-BSD și a fost depreciată de mulți ani). Argumentul „tzp” ar trebui să primească acum un pointer nul, iar funcția localtime() ar trebui să fie utilizată pentru a obține informații despre fusul orar pe baza orei curente. Apelarea gettimeofday cu un argument „tzp” diferit de zero va returna câmpurile goale tz_minuteswest și tz_dsttime din structura fusului orar. Funcția gettimeofday în sine este depreciată în POSIX (clock_gettime este recomandat în loc de gettimeofday), dar nu există planuri pentru ao elimina din glibc;
  • settimeofday nu mai acceptă trecerea simultană a parametrilor pentru setarea orei și a offset-ului de corectare a timpului. Când apelați settimeofday, unul dintre argumente (time sau offset) trebuie acum să fie setat la null, altfel apelul funcției va eșua cu o eroare EINVAL. La fel ca gettimeofday, funcția settimeofday este depreciată de POSIX și se recomandă să fie înlocuită cu funcția clock_settime sau familia de funcții adjtime;
  • Suportul pentru arhitectura SPARC ISA v7 a fost întrerupt (suportul v8 este păstrat pentru moment, dar numai pentru procesoarele care acceptă instrucțiuni CAS, cum ar fi procesoarele LEON, nu procesoarele SuperSPARC).
  • Dacă împerecherea eșuează în "leneș", în care linkerul nu caută simboluri ale unei funcții până la primul apel la acea funcție, funcția dlopen forțează acum procesul să se termine (anterior returnând NULL la eșec);
  • Pentru ABI hard-float MIPS, stiva executabilă este acum utilizată, cu excepția cazului în care construcția restricționează în mod explicit utilizarea nucleului Linux 4.8+ prin parametrul „-enable-kernel=4.8.0” (cu nuclee până la 4.8, blocările sunt observat pentru unele configurații MIPS);
  • Legăturile din jurul apelurilor de sistem legate de manipularea timpului au fost mutate pentru a utiliza apelul de sistem time64, dacă este prezent (pe sistemele pe 32 de biți, glibc încearcă mai întâi noi apeluri de sistem care manipulează tipul de timp pe 64 de biți, iar dacă nu există niciunul, cade înapoi la cele vechi apeluri pe 32 de biți).

Sursa: opennet.ru

Adauga un comentariu