Na zes maanden ontwikkeling is de release van de GNU C Library (glibc) 2.34 gepubliceerd, die volledig voldoet aan de eisen van de ISO C11 en POSIX.1-2017 standaarden. De nieuwe release bevat correcties van 66 ontwikkelaars.
Van de verbeteringen in Glibc 2.34 kunnen we het volgende opmerken:
- De bibliotheken libpthread, libdl, libutil en libanl zijn geïntegreerd in de hoofdlibc, waardoor het gebruik van functionaliteit in applicaties vanaf nu geen koppeling meer vereist met de vlaggen -lpthread, -ldl, -lutil en -lanl. Voorbereidingen zijn getroffen voor de integratie van libresolv in libc. Deze integratie zal leiden tot een samenhangender updateproces voor glibc en het gemakkelijker maken om runtime te implementeren. Voor de compatibiliteit met applicaties die met oudere versies van glibc zijn opgebouwd, zijn er stubbibliotheken beschikbaar gesteld. Vanwege de uitbreiding van het aantal structuren en functies die in glibc worden aangeboden, kunnen er problemen optreden in applicaties waarbij naamconflicten optreden met eerder ongebruikte bibliotheken zoals libpthread, libdl, libutil, libresolv en libanl.
- De mogelijkheid om het 64-bits type time_t te gebruiken in configuraties waar traditioneel het 32-bits type time_t werd gebruikt, is beschikbaar gesteld. In dergelijke configuraties, bijvoorbeeld op x86-systemen, blijft de standaard vooralsnog het 32-bits time_t, maar dit gedrag kan nu worden gewijzigd met behulp van de macro "_TIME_BITS". Deze mogelijkheid is alleen beschikbaar op systemen met een Linux-kernel van versie 5.1 of hoger.
- De functie _Fork is toegevoegd, als vervanging van de fork-functie, die voldoet aan de eisen van "async-signal-safe", wat betekent dat deze veilig kan worden opgeroepen vanuit signaalhandlers. Tijdens de uitvoering van _Fork wordt een minimale omgeving gevormd die voldoende is voor het aanroepen van functies in signaalhandlers, zoals raise en execve, zonder gebruik te maken van mogelijkheden die kunnen leiden tot veranderingen in locking of interne toestand. De aanroep van _Fork zal worden gedefinieerd in een toekomstige versie van de POSIX-standaard, maar is voorlopig opgenomen in de extensies van GNU.
- Voor het Linux-platform is de functie execveat geïmplementeerd, die het mogelijk maakt om een uitvoerbaar bestand te starten vanuit een geopend bestandsdescriptor. De nieuwe functie wordt ook gebruikt bij de implementatie van de fexecve-aanroep die geen gemounte pseudo-FS /proc vereist bij het opstarten.
- De functie timespec_getres is toegevoegd, die is gedefinieerd in de conceptstandaard ISO C2X en de functie timespec_get aanvult met mogelijkheden die lijken op de POSIX-functie clock_getres.
- De functie close_range() is toegevoegd, waarmee een proces in één keer een hele reeks open bestandsdescriptoren kan sluiten. De functie is beschikbaar op systemen met de Linux-kernel, minimaal versie 5.9.
- De functies closefrom en posix_spawn_file_actions_addclosefrom_np zijn toegevoegd, waarmee in één keer alle bestandsdescriptoren kunnen worden gesloten waarvan het nummer groter dan of gelijk is aan de opgegeven waarde.
- In de modi ‘_DYNAMIC_STACK_SIZE_SOURCE’ en ‘_GNU_SOURCE’ zijn de waarden PTHREAD_STACK_MIN, MINSIGSTKSZ en SIGSTKSZ nu geen constanten meer, waardoor ondersteuning voor dynamische registers mogelijk wordt, zoals die aangeboden worden door de ARM SVE-uitbreiding.
- Er is een optie ‘—list-diagnostics’ geïmplementeerd in de linker voor het weergeven van informatie met betrekking tot IFUNC-operaties (indirecte functie) en de selectie van de subdirectory glibc-hwcaps.
- De macro __STDC_WANT_IEC_60559_EXT__ is geïmplementeerd, bedoeld voor het controleren van de aanwezigheid van functies die zijn gedefinieerd in de ‘F’-applicatie van de ISO C2X-specificatie.
- Voor powerpc64*-systemen is de optie ‘—disable-scv’ geïmplementeerd, waarmee glibc kan worden gebouwd zonder ondersteuning voor de scv-instructie.
- In het bestand gconv-modules is alleen de minimal noodzakelijke set van gconv-modules behouden, terwijl de overige zijn verplaatst naar een extra bestand gconv-modules-extra.conf, dat in de gconv-modules.d-directory is geplaatst.
- Voor het Linux-platform is de parameter glibc.pthread.stack_cache_size geïmplementeerd, die kan worden gebruikt om de grootte van de pthread-stackcache in te stellen.
- De functie inet_neta uit de header <arpa/inet.h> en verschillende zelden gebruikte functies uit <resolv.h> (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) en <arpa/nameser.h> (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain) zijn als verouderd verklaard. In plaats van deze functies wordt aangeraden om aparte bibliotheken voor DNS te gebruiken.
- De functies pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np en pthread_yield zijn als verouderd verklaard, waarbij gebruik moet worden gemaakt van pthread_mutex_consistent, thread_mutexattr_getrobust, thread_mutexattr_setrobust en sched_yield.
- Het gebruik van symbolische linken voor het binden van geïnstalleerde gedeelde objecten aan de versie van Glibc is stopgezet. Dergelijke objecten worden nu geïnstalleerd zoals ze zijn (bijvoorbeeld, libc.so.6 is nu een bestand en niet een link naar libc-2.34.so).
- Standaard zijn de foutopsporingsmogelijkheden in malloc uitgeschakeld, zoals MALLOC_CHECK_ (glibc.malloc.check), mtrace() en mcheck(), die zijn verplaatst naar een aparte bibliotheek libc_malloc_debug.so, waarin ook verouderde functies malloc_get_state en malloc_set_state zijn ondergebracht.
- In Linux is het nu vereist dat het apparaat /dev/shm aanwezig is voor functies zoals shm_open en sem_open.
- Kwetsbaarheden opgelost:
- CVE-2021-27645: een crash van het nscd-proces (nameserver caching daemon) door dubbele aanroep van de free-functie bij het verwerken van speciaal opgemaakte netgroup-verzoeken.
- CVE-2021-33574: toegang tot een al vrijgegeven geheugenruimte (use-after-free) in de mq_notify-functie bij het gebruik van het notificatietype SIGEV_THREAD met een thread-attribuut waarvoor een alternatieve CPU-bindingsmasker is ingesteld. Dit probleem kan leiden tot een crash, maar andere aanvalsvormen zijn niet uitgesloten.
- CVE-2021-35942: een buffer-overflow van de parameter in de functie wordexp kan tot een crash van de applicatie leiden.
Bron: opennet.ru
