Nach sechs Monaten Entwicklung wurde die Veröffentlichung der GNU C Library (glibc) 2.34 bekannt gegeben, die vollstÀndig den Anforderungen der ISO C11 und POSIX.1-2017 entspricht. In der neuen Version sind Korrekturen von 66 Entwicklern enthalten.
Unter den in Glibc 2.34 umgesetzten Verbesserungen sind folgende hervorzuheben:
- Die Bibliotheken libpthread, libdl, libutil und libanl sind in die Kernbibliothek libc integriert, deren FunktionalitĂ€t in Anwendungen nun nicht mehr durch die Flags -lpthread, -ldl, -lutil und -lanl verknĂŒpft werden muss. Es wurde eine Vorbereitung zur Integration von libresolv in libc vorgenommen. Die Integration wird einen kohĂ€renteren Prozess zur Aktualisierung von glibc ermöglichen und die Implementierung zur Laufzeit vereinfachen. Um die AbwĂ€rtskompatibilitĂ€t mit Anwendungen, die mit Ă€lteren Versionen von glibc erstellt wurden, sicherzustellen, wurden Stub-Bibliotheken bereitgestellt. Aufgrund der Erweiterung der in glibc bereitgestellten Strukturen und Funktionen kann es zu Problemen in Anwendungen kommen, in denen es zu Namenskonflikten mit zuvor nicht verwendeten Bibliotheken wie libpthread, libdl, libutil, libresolv und libanl kommt.
- Die Möglichkeit, den 64-Bit-Typ time_t in Konfigurationen zu verwenden, in denen traditionell der 32-Bit-Typ time_t verwendet wurde, wurde bereitgestellt. In solchen Konfigurationen, beispielsweise auf x86-Systemen, bleibt standardmĂ€Ăig der 32-Bit time_t erhalten, jedoch kann dieses Verhalten jetzt ĂŒber das Makro "_TIME_BITS" geĂ€ndert werden. Diese Möglichkeit ist nur auf Systemen mit einem Linux-Kernel der Version 5.1 oder höher verfĂŒgbar.
- Die Funktion _Fork wurde hinzugefĂŒgt, eine Ersatzfunktion fĂŒr fork, die den Anforderungen an "async-signal-safe" entspricht, d.h. sie erlaubt sichere Aufrufe aus Signalhandlern. WĂ€hrend der AusfĂŒhrung von _Fork wird eine minimale Umgebung geschaffen, die ausreichend ist, um Funktionen in Signalhandlern wie raise und execve aufzurufen, ohne Ressourcen zu nutzen, die zu Ănderungen von Sperren oder internen ZustĂ€nden fĂŒhren können. Der Aufruf von _Fork wird in einer zukĂŒnftigen Version des POSIX-Standards definiert, ist aber bis dahin als GNU-Erweiterung enthalten.
- FĂŒr die Linux-Plattform wurde die Funktion execveat implementiert, die es ermöglicht, eine ausfĂŒhrbare Datei aus einem geöffneten Dateideskriptor zu starten. Die neue Funktion wird auch in der Implementierung des Aufrufs fexecve verwendet, der beim Start keine gemountete Pseudo-Dateisystemstruktur /proc benötigt.
- Die Funktion timespec_getres wurde hinzugefĂŒgt, die im Entwurf des Standards ISO C2X definiert ist und die Funktion timespec_get um Funktionen Ă€hnlich der POSIX-Funktion clock_getres erweitert.
- Die Funktion close_range() wurde hinzugefĂŒgt, die es einem Prozess ermöglicht, in einem Schritt einen gesamten Bereich offener Dateideskriptoren zu schlieĂen. Die Funktion ist auf Systemen mit einem Linux-Kernel in Version 5.9 oder höher verfĂŒgbar.
- Die Funktionen closefrom und posix_spawn_file_actions_addclosefrom_np wurden hinzugefĂŒgt, die es ermöglichen, alle Dateideskriptoren, deren Nummer gröĂer oder gleich dem angegebenen Wert ist, auf einmal zu schlieĂen.
- In den Modi â_DYNAMIC_STACK_SIZE_SOURCEâ und â_GNU_SOURCEâ sind die Werte PTHREAD_STACK_MIN, MINSIGSTKSZ und SIGSTKSZ nun keine Konstanten mehr, was die UnterstĂŒtzung von dynamisch dimensionierten Registersets ermöglicht, etwa die, die durch die ARM SVE-Erweiterung bereitgestellt werden.
- Im Linker wurde die Option ââlist-diagnosticsâ implementiert, um Informationen zu den Operationen zur Definition von IFUNC (indirekte Funktion) und zur Auswahl des glibc-hwcaps-Unterverzeichnisses auszugeben.
- Das Makro __STDC_WANT_IEC_60559_EXT__ wurde implementiert, um die VerfĂŒgbarkeit von Funktionen zu ĂŒberprĂŒfen, die im Anhang âFâ der ISO C2X-Spezifikation definiert sind.
- FĂŒr die Systeme powerpc64* wurde die Option ââdisable-scvâ implementiert, die es ermöglicht, glibc ohne UnterstĂŒtzung der scv-Anweisung zu kompilieren.
- In der Datei gconv-modules wurde nur die minimale Anzahl grundlegender gconv-Module belassen, wÀhrend die anderen in eine zusÀtzliche Datei gconv-modules-extra.conf verschoben wurden, die im Verzeichnis gconv-modules.d abgelegt ist.
- FĂŒr die Linux-Plattform wurde der Parameter glibc.pthread.stack_cache_size implementiert, der verwendet werden kann, um die GröĂe des pthread-Stack-Caches anzupassen.
- Die Funktion inet_neta aus der Header-Datei sowie verschiedene selten verwendete Funktionen aus (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) und (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain) wurden als veraltet erklÀrt. Anstelle dieser Funktionen wird empfohlen, separate Bibliotheken zur Arbeit mit DNS zu verwenden.
- Die Funktionen pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np und pthread_yield wurden als veraltet erklÀrt. Stattdessen sollten pthread_mutex_consistent, thread_mutexattr_getrobust, thread_mutexattr_setrobust und sched_yield verwendet werden.
- Die Verwendung von symbolischen Links zum Binden von installierten freigegebenen Objekten an die Glibc-Version wurde eingestellt. Solche Objekte werden jetzt unverÀndert installiert (zum Beispiel ist libc.so.6 nun eine Datei und kein Link auf libc-2.34.so).
- Die Debugging-Funktionen in malloc, wie MALLOC_CHECK_ (glibc.malloc.check), mtrace() und mcheck(), sind standardmĂ€Ăig deaktiviert und wurden in eine separate Bibliothek libc_malloc_debug.so verschoben, in die auch die veralteten Funktionen malloc_get_state und malloc_set_state ĂŒbertragen wurden.
- Unter Linux ist nun ein GerÀt /dev/shm erforderlich, um Funktionen wie shm_open und sem_open zu verwenden.
- Behobene SicherheitsanfÀlligkeiten:
- CVE-2021-27645: Der Absturz des nscd-Prozesses (Name Service Cache Daemon) aufgrund eines doppelten Aufrufs der Funktion free bei der Verarbeitung speziell gestalteter netgroup-Anfragen.
- CVE-2021-33574: Der Zugriff auf einen bereits freigegebenen Speicherbereich (use-after-free) in der Funktion mq_notify, wenn der Benachrichtigungstyp SIGEV_THREAD mit einem Threadattribut verwendet wird, fĂŒr das eine alternative CPU-Bindungsmaske festgelegt ist. Dieses Problem kann zu einem Absturz fĂŒhren, lĂ€sst jedoch auch andere Angriffsarten zu.
- CVE-2021-35942: Ein Ăberlauf der ParametergröĂe in der Funktion wordexp kann zu einem Absturz der Anwendung fĂŒhren.
Quelle: opennet.ru
