Po šiestich mesiacoch vývoja bol zverejnený release systémovej knižnice GNU C Library (glibc) 2.34, ktorá úplne spĺňa požiadavky noriem ISO C11 a POSIX.1-2017. Nové vydanie obsahuje opravy od 66 vývojárov.
Medzi realizovanými v Glibc 2.34 vylepšeniami je možné spomenúť:
- Do hlavného súboru libc boli integrované knižnice libpthread, libdl, libutil a libanl, pričom používanie funkčnosti týchto knižníc v aplikáciách už nevyžaduje viazanie s flagmi -lpthread, -ldl, -lutil a -lanl. Príprava na integráciu libresolv do libc bola vykonaná. Integrácia umožní dosiahnuť ucelenejší proces aktualizácie glibc a zjednoduší implementáciu runtime. Na zabezpečenie spätnej kompatibility s aplikáciami zostavenými so staršími verziami glibc sú poskytnuté knižnice-záložky. Rozšírením počtu poskytnutých štruktúr a funkcií v glibc sa môžu objaviť problémy v aplikáciách, v ktorých nastáva kolízia názvov s predtým nepoužívanými knižnicami libpthread, libdl, libutil, libresolv a libanl.
- Bol zavedený 64-bitový typ time_t v konfiguráciách, kde sa tradične používal 32-bitový typ time_t. V takýchto konfiguráciách, napríklad na systémoch x86, zatiaľ zostáva 32-bitový time_t ako predvolené, ale toto správanie je teraz možné zmeniť pomocou makra „_TIME_BITS“. Možnosť je dostupná len na systémoch s jadrom Linux aspoň verzie 5.1.
- Pridaná funkcia _Fork, náhrada funkcie fork, ktorá spĺňa požiadavky „async-signal-safe“, to znamená, že umožňuje bezpečné volanie z obslužných rutín signálov. Počas vykonávania _Fork sa vytvorí minimálne prostredie, dostatočné pre volanie funkcií v obslužných rutinách signálov, ako sú raise a execve, bez použitia funkcionalít, ktoré by mohli viesť k zmene zámkov alebo vnútorného stavu. Volanie _Fork bude definované v budúcej verzii štandardu POSIX, ale zatiaľ je zahrnuté medzi rozšíreniami GNU.
- Pre platformu Linux bola implementovaná funkcia execveat, umožňujúca spustiť spustiteľný súbor z otvoreného súborového deskriptoru. Nová funkcia sa tiež používa pri implementácii volania fexecve, ktoré počas spustenia nevyžaduje prítomnosť pripojenej pseudo-FS /proc.
- Pridaná funkcia timespec_getres, definovaná v návrhu normy ISO C2X, ktorá dopĺňa funkciu timespec_get o možnosti podobné funkcii clock_getres v POSIX.
- Pridaná funkcia close_range(), ktorá umožňuje procesu naraz zavrieť celý rozsah otvorených súborových deskriptorov. Funkcia je dostupná na systémoch s kernom Linux, minimálne vo verzii 5.9.
- Pridané funkcie closefrom a posix_spawn_file_actions_addclosefrom_np, ktoré umožňujú naraz uzavrieť všetky súborové deskriptory, ktorých číslo je väčšie alebo rovné zadanému hodnoteniu.
- V režimoch „_DYNAMIC_STACK_SIZE_SOURCE“ a „_GNU_SOURCE“ hodnoty PTHREAD_STACK_MIN, MINSIGSTKSZ a SIGSTKSZ už nie sú konštantami, čo umožňuje podporu dynamicky veľkých registrov, ako sú tie, ktoré poskytuje rozšírenie ARM SVE.
- V linkeru bola implementovaná možnosť „—list-diagnostics“ na výstup informácií súvisiacich s operáciami určenia IFUNC (nepriamych funkcií) a výberom podpriečinka glibc-hwcaps.
- Bol implementovaný makro __STDC_WANT_IEC_60559_EXT__, určený na kontrolu existencie funkcií definovaných v aplikácii „F“ špecifikácie ISO C2X.
- Pre systémy powerpc64* bola implementovaná možnosť „—disable-scv“, ktorá umožňuje zostaviť glibc bez podpory inštrukcie scv.
- V súbore gconv-modules bol ponechaný iba minimálny súbor základných modúl gconv, ostatné boli presunuté do doplnkového súboru gconv-modules-extra.conf, umiestneného v priečinku gconv-modules.d.
- Pre platformu Linux bola implementovaná parameter glibc.pthread.stack_cache_size, ktorý môže byť použitý na nastavenie veľkosti cache zásobníka pthread.
- Funkcia inet_neta v hlavičkovom súbore bola vyhlásená za zastaranú, rovnako ako rôzne málo používané funkcie z (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, p_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) a (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain). Namiesto týchto funkcií sa odporúča používať samostatné knižnice na prácu s DNS.
- Funkcie pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np a pthread_yield boli vyhlásené za zastarané, namiesto ktorých by sa mali používať pthread_mutex_consistent, thread_mutexattr_getrobust, thread_mutexattr_setrobust a sched_yield.
- Používanie symbolických odkazov na pripájanie inštalovaných zdieľaných objektov k verzii Glibc bolo zrušené. Takéto objekty sú teraz inštalované tak, ako sú (napríklad libc.so.6 je teraz súborom, nie odkazom na libc-2.34.so).
- Predvolene sú vypnuté možnosti ladenia v malloc, ako sú MALLOC_CHECK_ (glibc.malloc.check), mtrace() a mcheck(), ktoré boli presunuté do samostatnej knižnice libc_malloc_debug.so, do ktorej boli taktiež presunuté zastarané funkcie malloc_get_state a malloc_set_state.
- V systéme Linux je pre fungovanie funkcií ako shm_open a sem_open teraz potrebné mať zariadenie /dev/shm.
- Boli odstránené zraniteľnosti:
- CVE-2021-27645: havária procesu nscd (daemon na cachovanie menných serverov) v dôsledku dvojitého volania funkcie free pri spracovaní špeciálne formátovaných požiadaviek na netgroup.
- CVE-2021-33574: prístup k už uvoľnenej oblasti pamäte (use-after-free) vo funkcii mq_notify pri používaní typu upozornení SIGEV_THREAD s atribútom vlákna, pre ktoré je nastavená alternatívna maska priradenia k CPU. Problém môže viesť k havárii, ale nevylučujú sa ani iné varianty útokov.
- CVE-2021-35942: pretečenie veľkosti parametra vo funkcii wordexp môže viesť k havárii aplikácie.
Zdroj: opennet.ru
