Nach sechs Monaten Entwicklung wurde die Version 2.43 der GNU C Library (glibc) veröffentlicht, die vollständig den Anforderungen der Standards ISO C23 und POSIX.1-2024 entspricht. An der Erstellung dieser neuen Version waren 69 Entwickler beteiligt.
Zu den in Glibc 2.43 umgesetzten Verbesserungen gehören:
- Eine experimentelle Unterstützung für das Bauen mit dem Clang-Compiler wurde hinzugefügt, die derzeit nur für die Plattformen aarch64-linux-gnu und x86_64-linux-gnu verfügbar ist, wenn zur Laufzeit eine mit libgcc kompatible Version verwendet wird. Für das Bauen von Glibc ist mindestens Clang Version 18 erforderlich.
- Für Linux-Systeme wurde die Funktion mseal() hinzugefügt, die es Prozessen ermöglicht, eine Sperre für Änderungen an bestimmten Teilen ihres Adressraums festzulegen.
- Für Linux-Systeme wurde die Funktion openat2() hinzugefügt, die im Gegensatz zur Funktion openat() eine Reihe zusätzlicher Flags unterstützt, um die Dateipfadauflösung einzuschränken (Verbot der Überquerung von Einhängepunkten, symbolischen Links, magic-Links (/proc/PID/fd), Komponenten von „../“).
- Es wurden die Funktionen free_sized, free_aligned_sized, memset_explicit und memalignment hinzugefügt, die im C23-Standard eingeführt wurden.
- Gemäß dem Standard C23 wird der Aufruf von assert als Makro mit variabler Argumentanzahl definiert, das Ausdrücke mit Kommas innerhalb des Initialisierers unterstützt.
- Gemäß dem Standard C23 wurden die Funktionen bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr und wmemchr, die Zeiger auf die Eingabearrays zurückgeben, als Makros umdefiniert, die einen Zeiger auf einen Typ mit dem Qualifikator «const» zurückgeben, wenn das Eingabeargument ein Zeiger auf einen Typ mit dem Qualifikator «const» ist.
- Der Header math.h enthält jetzt die Definitionen der Typen long_double_t, _Float32_t, _Float64_t und _Float128_t, die im Standard C23 eingeführt wurden.
- Es wurden optionale Zeitmessmodi TIME_MONOTONIC (stets ansteigende Zeit, die nicht von Änderungen der Systemuhr abhängt), TIME_ACTIVE und TIME_THREAD_ACTIVE (Zeit der aktiven Ausführung eines Prozesses oder Threads) für die Verwendung in der Funktion timespec_get hinzugefügt.
- Optimierte Varianten der mathematischen Funktionen acosh, asinh, atanh, erf, erfc, lgamma und tgamma wurden aus dem Projekt CORE-MATH übertragen.
- Optimierte Implementierungen der Funktionen fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) und frexpl (intel96) wurden hinzugefügt.
- Die Leistung der mathematischen Funktionen acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 und yn/jn wurde durch die Entfernung des SVID-Fehlerverarbeitungs-Codes (Aufruf der Benutzerfunktion matherr bei Fehlern) für neue Builds verbessert (um die Kompatibilität mit bereits kompilierten Programmen zu gewährleisten, bleiben sie im compat-Modus erhalten).
- Auf x86-Systemen wurde die Unterstützung für die Intel-Prozessoren Nova Lake und Wildcat Lake hinzugefügt.
- Auf AArch64-Systemen wurde in der malloc-Funktion standardmäßig die Unterstützung für große Seiten (transparent huge pages) mit einer Größe von 2MB aktiviert (der Parameter ibc.malloc.hugetlb ist jetzt auf 1 gesetzt). In der clone()-Funktion wurde die Deaktivierung des ZA-Zustands (Z-Array) auf CPUs mit Unterstützung der SME-Erweiterung (Scalable Matrix Extension) implementiert.
- Für AArch64-Systeme, die die BTI-Erweiterung (Branch Target Identification) unterstützen, wurde die Einstellung glibc.cpu.aarch64_bti hinzugefügt, die es ermöglicht, BTI für alle ausführbaren Dateien und Bibliotheken zwangsweise zu aktivieren. BTI verhindert Sprünge zu beliebigen Code-Stellen, um der Erstellung von Gadgets in Exploits entgegenzuwirken, die Techniken der Rücksprung-orientierten Programmierung nutzen.
- Auf AArch64-Systemen, die eine der Erweiterungen zum Schutz der Zweigsteuerung (Branch Target Identification oder Guarded Control Stack) unterstützen, ist die Verwendung der Umgebungsvariablen „LD_DEBUG=security“ erlaubt, um vom Linker Warnungen beim Laden von ausführbaren Dateien und Bibliotheken auszugeben, die diese Erweiterungen nicht unterstützen.
- Für AArch64-Systeme wurden vektorielle Varianten der Funktionen exp2m1, exp10m1, log10p1, log2p1 und rsqrt hinzugefügt.
- Für die RISC-V-Architektur wurde eine optimierte Implementierung der Funktion memset hinzugefügt, die die RVV-Erweiterung (RISC-V Vector) nutzt.
- Im Testset wurde die Überprüfung der Multithreading-Fähigkeit sowie der Funktionen scanf, strerror und strsignal erheblich erweitert.
- Die Zeichencodierungen, Informationen über Zeichenarten und Transliterierungstabellen wurden aktualisiert, um die Unicode-Spezifikation 17.0.0 zu unterstützen.
- In der Implementierung der Funktionalität LD_PROFILE wurde die Verwendung des Standardverzeichnisses (/var/tmp) zur Speicherung von Profildaten eingestellt. Zum Speichern solcher Daten ist jetzt eine explizite Angabe des Verzeichnisses über die Umgebungsvariable LD_PROFILE_OUTPUT erforderlich.
- Sicherheitsanfälligkeiten wurden behoben:
- CVE-2026-0861 – ganzzahlige Überlauf in der Funktion memalign, die zu einem Heap-Beschädigung führt.
- CVE-2026-0915 – Inhalt des Stacks wird in den Funktionen getnetbyaddr und getnetbyaddr_r geleakt.
- CVE-2025-15281 — Rückgabe von nicht initialisiertem Speicher, der Restdaten enthalten kann, bei Verwendung der Funktion wordexp mit den Parametern WRDE_REUSE und WRDE_APPEND.
Außerdem hat das Cygwin-Projekt nach einem Jahr Entwicklung die Version 4.6.0 der Standard-C-Bibliothek newlib veröffentlicht, die von Ingenieuren der Firma Red Hat entwickelt wird. Die Bibliothek zielt darauf ab, eine kompakte Implementierung der Standard-C-Bibliothek (libc) bereitzustellen, die für den Einsatz in eingebetteten Systemen mit begrenztem nichtflüchtigem Speicher und RAM geeignet ist. Der Code des Projekts ist in C geschrieben und unter der LGPLv2-Lizenz veröffentlicht.
In der neuen Version von newlib:
- Erweiterte Unterstützung der Spezifikation POSIX.1-2024.
- Verbesserte Leistung der Funktionen memcpy, mempcpy und memmove.
- Neue Option „—enable-newlib-hw-misaligned-access“ hinzugefügt.
- Optimierung der Architektur RISC-V für die Funktionen der Serien mem* und str*.
- Überarbeiteter Code zur Verarbeitung von Lokalen, der die globale Variable global_locale_string zugunsten separater Variablen locale_string für jedes Locale-Objekt vom Typ locale_t entfernt.
- Unterstützung für die neue Plattform m68k-atari-elf hinzugefügt.
- Der Code strtorQ.c aus der FreeBSD-Bibliothek gdtoa wurde übertragen, um die Unterstützung des 128-Bit-Typs «long double» in der Funktion strtold zu implementieren.
- Die Zeichencodierungen wurden auf Unicode 17.0 aktualisiert.
Quelle: opennet.ru
