Nach sechsmonatiger Entwicklung wurde die Version 2.43 der GNU C Library (glibc) veröffentlicht, die vollständig den Anforderungen der ISO C23- und POSIX.1-2024-Standards entspricht. An der Erstellung dieser neuen Version waren 69 Entwickler beteiligt.
Zu den Verbesserungen in Glibc 2.43 gehören:
- Es wurde eine experimentelle Unterstützung für den Compiler Clang hinzugefügt, die derzeit nur für die Plattformen aarch64-linux-gnu und x86_64-linux-gnu verfügbar ist, wenn zur Laufzeit eine libgcc-kompatible Umgebung verwendet wird. Zum Erstellen von Glibc ist mindestens Version 18 von Clang erforderlich.
- Für Linux-Systeme wurde die Funktion mseal() hinzugefügt, die es Prozessen ermöglicht, eine Sperre auf bestimmte Teile ihres Adressraums zu setzen.
- Für Linux-Systeme wurde die Funktion openat2() hinzugefügt, die im Gegensatz zu openat() einen zusätzlichen Satz von Flags unterstützt, um die Dateipfadauflösung einzuschränken (einschließlich des Verbots von Überkreuzungen von Mount-Punkten, symbolischen Links, Magic-Links (\/proc\/PID\/fd) und Komponenten von „..\/“).
- Die Funktionen free_sized, free_aligned_sized, memset_explicit und memalignment wurden gemäß dem C23-Standard hinzugefügt.
- Gemäß dem C23-Standard wird der Aufruf von assert als Makro mit variabler Argumentanzahl definiert, das Ausdrücke mit Kommas im Initialisierer unterstützt.
- Gemäß dem C23-Standard wurden die Funktionen bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr und wmemchr, die Zeiger auf Eingabearrays zurückgeben, als Makros umdefiniert, die einen Zeiger auf einen Typ mit dem Qualifikator „const“ zurückgeben, wenn das Eingangsargument ein Zeiger auf einen Typ mit dem Qualifikator „const“ ist.
- In die Header-Datei math.h wurden die Typdefinitionen long_double_t, _Float32_t, _Float64_t und _Float128_t aufgenommen, die im C23-Standard erschienen sind.
- Es wurden optionale Zeitmessmodi TIME_MONOTONIC (stetig ansteigende Zeit, unabhängig von Änderungen der Systemuhr), TIME_ACTIVE und TIME_THREAD_ACTIVE (aktives Ausführungszeit 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 übernommen.
- 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 verbessert, indem der SVID-Fehlerbehandlungscode (Aufruf der benutzerdefinierten Funktion matherr bei einem Fehler) für neue Builds entfernt wurde (um die Kompatibilität mit bereits erstellten Programmen zu gewährleisten, wurden sie im Kompatibilitätsmodus belassen).
- Auf x86-Systemen wurde die Unterstützung für Intel-Prozessoren Nova Lake und Wildcat Lake hinzugefügt.
- Auf AArch64-Systemen wurde die Unterstützung für große Seiteneinträge (transparent huge pages) mit 2MB standardmäßig für die Funktion malloc aktiviert (der Parameter ibc.malloc.hugetlb ist jetzt auf 1 gesetzt). In der Funktion clone() wurde die Deaktivierung des ZA-Zustands (Z-Array) auf CPUs mit 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 willkürlichen Codeabschnitten, um der Gadget-Erstellung in Exploits entgegenzuwirken, die Techniken des Return-Oriented Programming verwenden.
- Auf AArch64-Systemen, die eine der Erweiterungen zum Schutz des Branchings (Branch Target Identification oder Guarded Control Stack) unterstützen, ist die Verwendung der Umgebungsvariable „LD_DEBUG=security“ erlaubt, um vom Linker Warnmeldungen auszugeben, wenn ausführbare Dateien und Bibliotheken geladen werden, 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 Test-Set wurde die Überprüfung der Mehrfachverarbeitung und der Funktionen scanf, strerror und strsignal erheblich erweitert.
- Die Zeichencodierungen, Informationen zu Zeichentypen und Transliterationstabellen 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 Profilierungsdaten eingestellt. Um solche Daten zu speichern, ist jetzt eine explizite Definition eines Verzeichnisses über die Umgebungsvariable LD_PROFILE_OUTPUT erforderlich.
- Behobene Sicherheitsanfälligkeiten:
- CVE-2026-0861 — Ganzzahlüberlauf in der Funktion memalign, was zu einer Heap-Beschädigung führt.
- CVE-2026-0915 — Speicherleck im Stack in den Funktionen getnetbyaddr und getnetbyaddr_r.
- CVE-2025-15281 — Rückgabe nicht initialisierter Speicher, der Restdaten enthalten kann, bei Verwendung der Funktion wordexp mit den Parametern WRDE_REUSE und WRDE_APPEND.
Darüber hinaus 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 wenig persistentem Speicher und RAM geeignet ist. Der Code des Projekts ist in C geschrieben und wird unter der LGPLv2-Lizenz verbreitet.
In der neuen Version von newlib:
- Die Unterstützung der Spezifikation POSIX.1-2024 wurde erweitert.
- Die Leistung der Funktionen memcpy, mempcpy und memmove wurde verbessert.
- Die Option „—enable-newlib-hw-misaligned-access“ wurde hinzugefügt.
- Die RISC-V-Architektur wurde zur Optimierung der Funktionen der Serien mem* und str* überarbeitet.
- Der Code zur Verarbeitung von Lokalen wurde neu gestaltet, indem die globale Variable global_locale_string durch separate Variablen locale_string für jedes locale_t-Objekt ersetzt wurde.
- Unterstützung für die neue Plattform m68k-atari-elf hinzugefügt.
- Der Code strtorQ.c aus der FreeBSD-Bibliothek gdtoa wurde übernommen, der zur Implementierung der Unterstützung des 128-Bit-Typs „long double“ in der Funktion strtold verwendet wird.
- Die Kodierungsdaten wurden auf Unicode 17.0 aktualisiert.
Quelle: opennet.ru
