Izdanje sistemske biblioteke Glibc 2.34

Nakon šest mjeseci razvoja, puštena je sistemska biblioteka GNU C Library (glibc) 2.34, 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.34 uključuju:

  • Biblioteke libpthread, libdl, libutil i libanl integrirane su u glavnu libc strukturu, korištenje njihove funkcionalnosti u aplikacijama više ne zahtijeva povezivanje pomoću oznaka -lpthread, -ldl, -lutil i -lanl. Izvršene su pripreme za integraciju libresolva u libc. Integracija će omogućiti besprijekorniji proces ažuriranja glibc-a i pojednostaviti implementaciju vremena izvršavanja. Stub biblioteke su obezbeđene da obezbede kompatibilnost unazad sa aplikacijama napravljenim sa starijim verzijama glibc-a. Zbog proširenja broja struktura i funkcija koje pruža glibc, mogu se pojaviti problemi u aplikacijama u kojima postoji ukrštanje imena sa prethodno nekorišćenim bibliotekama libpthread, libdl, libutil, libresolv i libanl.
  • Pruža mogućnost korištenja 64-bitnog tipa time_t u konfiguracijama koje su tradicionalno koristile 32-bitni tip time_t. U takvim konfiguracijama, na primjer na x86 sistemima, default je i dalje 32-bitni time_t, ali ovo ponašanje se sada može promijeniti korištenjem makronaredbe "_TIME_BITS". Ova funkcija je dostupna samo na sistemima sa najmanje verzijom Linux kernela 5.1.
  • Dodata je funkcija _Fork, zamjena za funkciju fork koja ispunjava zahtjeve “async-signal-safe”, tj. omogućavajući sigurno pozivanje rukovatelja signalom. Tokom izvršavanja _Fork, kreira se minimalno okruženje koje je dovoljno za pozivanje funkcija u rukovaocima signalima kao što su podizanje i izvršavanje bez uključivanja funkcija koje bi mogle promijeniti zaključavanje ili interno stanje. Poziv _Fork će biti definiran u budućoj verziji POSIX standarda, ali za sada je uključen kao GNU ekstenzija.
  • Za Linux platformu implementirana je funkcija execveat koja vam omogućava da pokrenete izvršnu datoteku iz otvorenog deskriptora datoteke. Nova funkcija se također koristi u implementaciji fexecve poziva, koji ne zahtijeva montirani pseudo-FS /proc pri pokretanju.
  • Dodata funkcija timespec_getres, definisana u nacrtu ISO C2X standarda, koja proširuje funkciju timespec_get sa mogućnostima sličnim funkciji POSIX clock_getres.
  • Dodata close_range() funkcija, koja omogućava procesu da zatvori čitav niz otvorenih deskriptora datoteka odjednom. Funkcija je dostupna na sistemima sa Linux kernelom od najmanje verzije 5.9.
  • Dodane funkcije closefrom i posix_spawn_file_actions_addclosefrom_np, koje vam omogućavaju da zatvorite sve deskriptore datoteka odjednom, čiji je broj veći ili jednak navedenoj vrijednosti.
  • U režimima "_DYNAMIC_STACK_SIZE_SOURCE" i "_GNU_SOURCE", PTHREAD_STACK_MIN, MINSIGSTKSZ i SIGSTKSZ više nisu konstante, omogućavajući podršku za dinamičke skupove registara kao što su oni koji se nalaze u ekstenziji ARM SVE.
  • Povezivač implementira opciju "--list-diagnostics" za prikaz informacija koje se odnose na IFUNC (indirektne funkcije) definicije operacija i glibc-hwcaps odabir poddirektorija.
  • Makro __STDC_WANT_IEC_60559_EXT__ je implementiran, dizajniran da provjeri prisustvo funkcija definiranih u Aneksu F specifikacije ISO C2X.
  • Za powerpc64* sisteme implementirana je opcija “--disable-scv”, koja vam omogućava da napravite glibc bez podrške scv instrukciji.
  • U datoteci gconv-modules ostaje samo minimalni skup osnovnih gconv modula, a ostatak se premješta u dodatnu datoteku gconv-modules-extra.conf, koja se nalazi u direktoriju gconv-modules.d.
  • Za Linux platformu implementiran je parametar glibc.pthread.stack_cache_size, koji se može koristiti za konfiguriranje veličine keša pthread steka.
  • Funkcija inet_neta iz datoteke zaglavlja je zastarjela , kao i razne funkcije koje se rijetko koriste (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, put_typeourserver put, p_ , res_name upit, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) i (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain). Umjesto ovih funkcija, preporučuje se korištenje zasebnih biblioteka za rad sa DNS-om.
  • Funkcije pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np i pthread_yield su zastarjele, a umjesto njih treba koristiti pthread_mutex_consistent, thread_mutexattr_getrobust, tr_schrobuield i hread_mutex.
  • Zaustavljeno korištenje simboličkih veza za povezivanje instaliranih zajedničkih objekata za Glibc verziju. Takvi objekti su sada instalirani onakvi kakvi jesu (npr. libc.so.6 je sada datoteka, a ne veza na libc-2.34.so).
  • Podrazumevano, funkcije za otklanjanje grešaka u malloc-u su onemogućene, kao što su MALLOC_CHECK_ (glibc.malloc.check), mtrace() i mcheck(), koje se premeštaju u zasebnu biblioteku libc_malloc_debug.so, u koju takođe imaju zastarele funkcije malloc_get_state i malloc_set_sta preseljeno.
  • Na Linuxu, funkcije poput shm_open i sem_open sada zahtijevaju /dev/shm uređaj za rad.
  • Popravljene ranjivosti:
    • CVE-2021-27645: nscd (demon za keširanje servera imena) proces pada zbog dvostrukog poziva besplatne funkcije prilikom obrade posebno kreiranih zahtjeva za mrežne grupe.
    • CVE-2021-33574: Pristup već oslobođenom memorijskom području (use-after-free) u funkciji mq_notify kada se koristi tip obavijesti SIGEV_THREAD s atributom niti za koji je postavljena alternativna maska ​​afiniteta CPU-a. Problem bi mogao dovesti do pada, ali se ne mogu isključiti druge opcije napada.
    • CVE-2021-35942: Prekoračenje veličine parametra u funkciji wordexp može uzrokovati pad aplikacije.

izvor: opennet.ru

Dodajte komentar