Efter seks måneders udvikling er version 2.34 af GNU C Library (glibc) blevet offentliggjort, som fuldt ud overholder kravene i ISO C11- og POSIX.1-2017-standarderne. Den nye udgivelse inkluderer rettelser fra 66 udviklere.
Blandt forbedringerne i Glibc 2.34 kan nævnes:
- De primære komponenter i libc har fået integreret bibliotekerne libpthread, libdl, libutil og libanl, hvilket betyder, at deres funktionalitet nu kan anvendes i applikationer uden at skulle binde via flagene -lpthread, -ldl, -lutil og -lanl. Der er gjort forberedelser til integration af libresolv i libc. Denne integration vil skabe en mere sammenhængende opdateringsproces for glibc og forenkle implementeringen af runtime. For at sikre bagudkompatibilitet med applikationer bygget med ældre versioner af glibc, er der stillet stubbiblioteker til rådighed. På grund af det udvidede antal strukturer og funktioner til rådighed i glibc er der ikke udelukket, at der kan opstå problemer i applikationer, der har navnekollisioner med tidligere ubrugte biblioteker som libpthread, libdl, libutil, libresolv og libanl.
- Muligheden for at bruge den 64-bit time_t type i konfigurationer, hvor den 32-bit time_t type traditionelt blev brugt, er blevet tilføjet. I sådanne konfigurationer, for eksempel på x86-systemer, forbliver 32-bit time_t som standard indtil videre, men denne adfærd kan nu ændres ved hjælp af makroen «_TIME_BITS». Muligheden er kun tilgængelig på systemer med Linux-kærne version 5.1 eller højere.
- Funktionen _Fork er blevet tilføjet som en erstatning for fork-funktionen, der opfylder kravene til «async-signal-safe», dvs. den tillader sikker kald fra signalbehandlere. Under udførelsen af _Fork dannes et minimumsmiljø, der er tilstrækkeligt til at kalde funktioner i signalbehandlere, såsom raise og execve, uden at aktivere funktioner, der kan ændre låsninger eller den interne tilstand. Kaldet til _Fork vil blive defineret i en fremtidig version af POSIX, men er allerede inkluderet som en del af GNU-udvidelserne.
- Der er implementeret en execveat-funktion til Linux-platformen, som gør det muligt at køre en eksekverbar fil fra en åben filbeskrivelse. Den nye funktion bruges også i implementeringen af fexecve-kaldet, der ikke kræver, at den pseudofile system /proc er monteret ved kørsel.
- Funktionen timespec_getres er blevet tilføjet, som er defineret i udkastet til ISO C2X-standarden og supplerer funktionen timespec_get med funktionalitet, der ligner POSIX-funktionen clock_getres.
- Funktionen close_range() er blevet tilføjet, hvilket giver processen mulighed for at lukke en hel række af åbne filbeskrivelser ad gangen. Funktionen er tilgængelig på systemer med Linux-kerneller af version 5.9 eller nyere.
- Funktionerne closefrom og posix_spawn_file_actions_addclosefrom_np er blevet tilføjet, som giver mulighed for at lukke alle filbeskrivelser, hvis nummer er lig med eller større end angivet værdi, på én gang.
- I tilstandene «_DYNAMIC_STACK_SIZE_SOURCE» og «_GNU_SOURCE» er værdierne PTHREAD_STACK_MIN, MINSIGSTKSZ og SIGSTKSZ ikke længere konstante, hvilket muliggør understøttelse af dynamisk størrelsesregistersæt, f.eks. dem der tilbydes i ARM SVE-udvidelsen.
- Linkeren har implementeret en mulighed «—list-diagnostics» for at udskrive information relateret til operationer om at bestemme IFUNC (indirect function) og valg af glibc-hwcaps-underkatalog.
- Makroen __STDC_WANT_IEC_60559_EXT__ er blevet implementeret, som er beregnet til at kontrollere tilgængeligheden af funktioner, der er defineret i applikationen «F» i ISO C2X-specifikationen.
- For powerpc64*-systemer er muligheden «—disable-scv» blevet implementeret, hvilket muliggør kompilation af glibc uden støtte for instruktionen scv.
- Fil gconv-modules har kun det minimale sæt af basis gconv-moduler tilbage, mens de andre er flyttet til en ekstra fil gconv-modules-extra.conf, som er placeret i kataloget gconv-modules.d.
- For Linux-platformen er parameteren glibc.pthread.stack_cache_size blevet implementeret, som kan bruges til at konfigurere størrelsen på pthread-stack-cachen.
- Funktionen inet_neta i headerfilen samt forskellige sjældent anvendte funktioner fra (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) og (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain) er blevet erklæret forældede. Det anbefales at bruge separate biblioteker til arbejdet med DNS i stedet for disse funktioner.
- Funktionerne pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np og pthread_yield er blevet erklæret forældede, og i stedet bør pthread_mutex_consistent, thread_mutexattr_getrobust, thread_mutexattr_setrobust og sched_yield anvendes.
- Brugen af symbolske links til at knytte installerede delte objekter til versionen af Glibc er blevet stoppet. Sådanne objekter installeres nu som de er (f.eks. libc.so.6 er nu en fil og ikke et link til libc-2.34.so).
- Som standard er Debugging-funktioner i malloc, såsom MALLOC_CHECK_ (glibc.malloc.check), mtrace() og mcheck(), deaktiveret og flyttet til et separat bibliotek libc_malloc_debug.so, hvori også de forældede funktioner malloc_get_state og malloc_set_state er blevet flyttet.
- I Linux kræves det nu, at enheden /dev/shm eksisterer for at bruge funktioner som shm_open og sem_open.
- Sårbarheder udbedret:
- CVE-2021-27645: nscd-processen (nameserver caching daemon) kan nedbrydes på grund af en dobbelt opkald til funktionen free, når der behandles specielt formaterede netgroup-forespørgsler.
- CVE-2021-33574: Adgang til allerede frigivet hukommelse (use-after-free) i funktionen mq_notify, når der bruges type notifikation SIGEV_THREAD med en trådattribut, der har en alternativ CPU-bindingsmaske. Problemet kan føre til nedbrud, men andre angrebsformer kan også være mulige.
- CVE-2021-35942: En parameterstørrelsessoftwarefejl i funktionen wordexp kan føre til applikationsnedbrud.
Kilde: opennet.ru
