Glibc 2.35 Izdanje knjižnice sustava

Nakon šest mjeseci razvoja izašla 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:

  • Dodana je podrška za lokalizaciju "C.UTF-8", koja uključuje pravila uspoređivanja za sve Unicode kodove, ali radi uštede prostora ograničena je na upotrebu ASCII raspona u funkcijama fnmatch, regexec i regcomp. Lokalitet je oko 400 KB, od čega su 346 KB LC_CTYPE podaci za Unicode i zahtijevaju zasebnu instalaciju (nije ugrađena u Glibc).
  • Podaci o kodiranju, podaci o vrsti znakova i tablice transliteracije ažurirani su kako bi podržali specifikaciju Unicode 14.0.0.
  • U I implementirane su funkcije i makronaredbe koje zaokružuju rezultat na uži tip: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN i fMxfmafNx. Funkcije su opisane u specifikacijama TS 18661-1:2014, TS 18661-3:2015 i dodane nacrtu budućeg standarda ISO C2X C.
  • U I implementirane funkcije i makronaredbe za pronalaženje minimuma i maksimuma brojeva s pomičnim zarezom s tipovima float, long double, _FloatN i _FloatNx, opisane u specifikaciji IEEE 754-2019 i dodane nacrtu budućeg standarda ISO C2X C: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • U dodane konstante za brojeve s pomičnim zarezom pojedinačne preciznosti: 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_SQRTPIf, M_SQRT2f i M_SQRT1_2f.
  • Za funkcije exp10 u datoteci zaglavlja Dodane su odgovarajuće makronaredbe koje nisu vezane uz određene vrste.
  • U dodao makronaredbu _PRINTF_NAN_LEN_MAX predloženu u nacrtu standarda ISO C2X.
  • Dodani specifikatori formata "%b" i "%B" obitelji funkcija printf za ispis cijelih brojeva u binarnom prikazu.
  • Sustav dinamičkog povezivanja implementira novi DSO algoritam sortiranja koji koristi dubinsko pretraživanje (DFS) za rješavanje problema s performansama pri rukovanju ovisnostima u petlji. Za odabir DSO algoritma sortiranja predlaže se parametar glibc.rtld.dynamic_sort, koji se može postaviti na "1" za vraćanje na stari algoritam.
  • ABI je dodao podršku za novu funkciju '__memcmpeq', koju prevoditelji koriste za optimizaciju upotrebe 'memcmp' ako se vrijednost koju vraća ova funkcija koristi samo za provjeru statusa završetka operacije.
  • Dodana je podrška za automatsko registriranje niti pomoću sistemskog poziva rseq (sekvence koje se mogu ponovno pokrenuti) od Linux kernela 4.18. Sistemski poziv rseq omogućuje organiziranje kontinuiranog izvođenja grupe instrukcija koje se ne prekida i potvrđuje rezultat posljednjom instrukcijom u grupi. U biti, pruža sredstva za vrlo brzo atomsko izvršavanje operacija koje se, ako ih prekine druga nit, čiste i pokušavaju ponovno.
  • Dodana simbolička veza /usr/bin/ld.so.
  • Omogućen je zadani sklop svih izvršnih datoteka ugrađenih programa i testnog skupa u PIE (izvršna datoteka neovisna o položaju). Da biste onemogućili ovo ponašanje, dostupna je opcija “--disable-default-pie”.
  • Za Linux je dodana postavka glibc.malloc.hugetlb koja omogućuje prebacivanje implementacije malloc za korištenje sistemskog poziva madvise s oznakom MADV_HUGEPAGE za mmap i sbrk ili za izravnu upotrebu velikih memorijskih stranica određivanjem oznake MAP_HUGETLB u mmap poziva. U prvom slučaju, poboljšanja performansi mogu se postići ako se Transparent Huge Pages koriste u madvise modu, au drugom slučaju, omogućena je mogućnost korištenja sistemski rezerviranih Huge Pages.
  • Dodana funkcija _dl_find_object koja se može koristiti za dodavanje informacija o odmotavanju stoga poziva.
  • Dodana podrška za OpenRISC arhitekturu (ili 1k-linux-gnu) u soft-float modu. Priključak zahtijeva binutils 2.35, GCC 11 i Linux kernel 5.4.
  • Dodana je oznaka izgradnje "--with-rtld-early-cflags", koja se može koristiti za određivanje dodatnih oznaka kompilacije 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 određivanjem vremenskog ograničenja s preciznošću od nanosekunde.
  • Dodana funkcija posix_spawn_file_actions_addtcsetpgrp_np za uklanjanje uvjeta utrke prilikom postavljanja kontrolnog terminala za novi proces.
  • Za aplikacije kompajlirane s Glibc i GCC 12+ implementiran je način zaštite “_FORTIFY_SOURCE=3” koji otkriva moguća prekoračenja međuspremnika 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 smanjene izvedbe.
  • Podrška za Intel MPX (Memory Protection Extensions), koja se koristi za provjeru pokazivača za ograničenja memorije, je ukinuta (ova tehnologija nije postala široko rasprostranjena i već je uklonjena iz GCC i LLVM).
  • Mehanizam predveze i njemu pridružene 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 – Prelijevanje međuspremnika 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 snopa i koje koriste "unix" protokol, ranjivost može dovesti do izvršenja koda napadača prilikom obrade vrlo dugih naziva datoteka.
    • CVE-2021-3998 je ranjivost u funkciji realpath() zbog vraćanja, pod određenim uvjetima, netočne vrijednosti koja sadrži neočišćene zaostale podatke sa stoga. Za SUID-root fusermount program, ranjivost se može koristiti za dobivanje osjetljivih informacija iz memorije procesa, na primjer, za dobivanje informacija o pokazivačima.
    • CVE-2021-3999 - Jednobajtno prekoračenje međuspremnika u funkciji getcwd(). Problem je uzrokovan bugom koji je prisutan od 1995. godine. Da izazovete preljev, jednostavno pozovite chdir() u direktoriju "/" u zasebnom prostoru imena točke montiranja.

    Izvor: opennet.ru

Dodajte komentar