Izdanje sistemske biblioteke Glibc 2.35

Nakon šest mjeseci razvoja, puštena je sistemska biblioteka GNU C Library (glibc) 2.35, koja je u potpunosti usklađena sa zahtjevima standarda ISO C11 i POSIX.1-2017. Novo izdanje uključuje popravke od 66 programera.

Neka od poboljšanja implementiranih u Glibc 2.35 uključuju:

  • Dodata podrška za "C.UTF-8" lokalizaciju, koja uključuje pravila razvrstavanja za sve Unicode kodove, ali da bi se uštedio prostor ograničen je na upotrebu ASCII opsega u funkcijama fnmatch, regexec i regcomp. Lokalizacija je oko 400 KB, od čega su 346 KB LC_CTYPE podaci za Unicode i zahtijeva posebnu instalaciju (nije ugrađeno u Glibc).
  • Podaci o kodiranju, informacije o tipu znakova i tablice transliteracije su ažurirane kako bi podržale Unicode 14.0.0 specifikaciju.
  • i implementiraju funkcije i makroe koji zaokružuju rezultat na uži tip: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfN, fMxsqrtfN, fMxsqrtfNfma, fMxsqrtfNfma fMxfmafNx. Funkcije su opisane u specifikacijama TS 18661-1:2014, TS 18661-3:2015 i dodane nacrtu budućeg ISO C2X C standarda.
  • i implementiraju funkcije i makroe za pronalaženje minimuma i maksimuma float, long double, _FloatN i _FloatNx brojeva s pomičnim zarezom, opisanih u IEEE 754-2019 specifikaciji i dodanih nacrtu budućnosti ISO C2X standard: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • Dodane konstante za brojeve s pomičnim zarezom jednostruke preciznosti u : M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_f_SQS, M_2, F_SQS
  • Za exp10 funkcije, odgovarajući makroi koji nisu vezani za određene tipove dodani su u datoteku zaglavlja .
  • Dodan makro _PRINTF_NAN_LEN_MAX predložen u nacrtu ISO C2X standarda u .
  • Dodati "%b" i "%B" specifikacije formata u printf familiju funkcija za ispis cijelih brojeva u binarnom prikazu.
  • Sistem dinamičkog povezivanja implementira novi DSO algoritam sortiranja koji koristi pretragu po dubini (DFS) za rješavanje problema performansi prilikom rukovanja ovisnostima u petlji. Za odabir DSO algoritma za sortiranje, predlaže se parametar glibc.rtld.dynamic_sort, koji se može postaviti na “1” da se vrati na stari algoritam.
  • ABI je dodao podršku za novu funkciju '__memcmpeq', koju kompajleri koriste za optimizaciju upotrebe 'memcmp' ako se vrijednost koju vraća ova funkcija koristi samo za provjeru statusa završetka operacije.
  • Dodata podrška za automatsku registraciju niti pomoću sistemskog poziva rseq (restartabilne sekvence) od Linux kernela 4.18. Sistemski poziv rseq vam omogućava da organizirate kontinuirano izvršavanje grupe instrukcija koje nije prekinuto i potvrđuje rezultat posljednjom instrukcijom u grupi. U suštini, pruža sredstvo za vrlo brzo atomsko izvršavanje operacija koje se, ako ih prekine druga nit, čiste i pokušavaju ponovo.
  • Dodata simbolična veza /usr/bin/ld.so.
  • Obezbeđen je podrazumevani sklop svih izvršnih datoteka ugrađenih programa i test skupa u režimu PIE (izvršna datoteka nezavisno od pozicije). Da biste onemogućili ovo ponašanje, omogućena je opcija “--disable-default-pie”.
  • Za Linux je dodana postavka glibc.malloc.hugetlb koja omogućava prebacivanje malloc implementacije na korištenje sistemskog poziva madvise sa zastavom MADV_HUGEPAGE za mmap i sbrk, ili direktno korištenje velikih memorijskih stranica navođenjem oznake MAP_HUGETLB u mmap poziva. U prvom slučaju, povećanje performansi se može postići ako se Transparent Huge Pages koriste u madvise modu, au drugom slučaju je omogućena mogućnost korištenja sistemski rezervisanih ogromnih stranica.
  • Dodata funkcija _dl_find_object koja se može koristiti za dodavanje informacija o odmotavanju steka poziva.
  • Dodata podrška za OpenRISC arhitekturu (or1k-linux-gnu) u soft-float modu. Za port je potreban binutils 2.35, GCC 11 i Linux kernel 5.4.
  • Dodata je zastavica izgradnje "--with-rtld-early-cflags", koja se može koristiti za specificiranje dodatnih kompilacijskih zastavica koje se koriste prilikom izgradnje početnog koda za dinamičko povezivanje.
  • Za Linux platformu dodana je funkcija epoll_pwait2, koja se razlikuje od epoll_wait specificiranjem vremenskog ograničenja s preciznošću od nanosekunde.
  • Dodata funkcija posix_spawn_file_actions_addtcsetpgrp_np za eliminaciju uvjeta utrke prilikom postavljanja kontrolnog terminala za novi proces.
  • Za aplikacije kompajlirane sa Glibc-om i GCC 12+ implementiran je zaštitni način “_FORTIFY_SOURCE=3”, koji detektuje moguće prekoračenja bafera prilikom izvršavanja funkcija niza definiranih u datoteci zaglavlja string.h. Razlika u odnosu na način rada “_FORTIFY_SOURCE=2” svodi se na dodatne provjere, što potencijalno može dovesti do smanjenja performansi.
  • Podrška za Intel MPX (Memory Protection Extensions), koja se koristi za provjeru pokazivača za memorijske granice, je ukinuta (ova tehnologija nije postala široko rasprostranjena i već je uklonjena iz GCC-a i LLVM-a).
  • Mehanizam predvezivanja i njegove povezane varijable okruženja LD_TRACE_PRELINKING i LD_USE_LOAD_BIAS su zastarjeli i bit će uklonjeni u budućem izdanju.

    Popravljene ranjivosti:

    • CVE-2022-23218, CVE-2022-23219 – Prelivanje bafera u funkcijama svcunix_create i clnt_create uzrokovano kopiranjem sadržaja parametra naziva datoteke na stog bez provjere veličine kopiranih podataka. Za aplikacije izgrađene bez zaštite steka i koje koriste “unix” protokol, ranjivost može dovesti do izvršenja koda napadača prilikom obrade vrlo dugačkih imena datoteka.
    • CVE-2021-3998 je ranjivost u funkciji realpath() zbog vraćanja, pod određenim uslovima, netačne vrijednosti koja sadrži neočišćene preostale podatke iz steka. Za SUID-root fusermount program, ranjivost se može koristiti za dobivanje osjetljivih informacija iz procesne memorije, na primjer, za dobivanje informacija o pokazivačima.
    • CVE-2021-3999 - Prelivanje bafera od jednog bajta u funkciji getcwd(). Problem je uzrokovan greškom koja je prisutna od 1995. godine. Da biste izazvali prelijevanje, jednostavno pozovite chdir() u direktoriju "/" u zasebnom imenskom prostoru točke montiranja.

    izvor: opennet.ru

Dodajte komentar