Nach sechsmonatiger Entwicklung wurde die systematische Bibliothek GNU C Library 2.42 (glibc) veröffentlicht, die vollständig den Anforderungen der ISO C23 und POSIX.1-2024 entspricht. An der Erstellung dieser neuen Version waren 70 Entwickler beteiligt.
Zu den Verbesserungen in Glibc 2.42 gehören:
- Die Funktion pthread_create unterstützt jetzt leichtgewichtige Wachseiten zum Schutz des Stacks (Stack Guard Page), deren Zugriff eine Ausnahme auslöst und den Prozess (SIGSEGV) zum Absturz bringt. Diese Implementierung basiert auf dem neuen Flag MADV_GUARD_INSTALL im Systemaufruf madvise, das ab Kernel Linux 6.13 unterstützt wird. Im Vergleich zur Zuordnung im PROT_NONE-Modus ermöglichen Wachseiten eine effizientere Blockade der Ausführung von Code außerhalb des zugewiesenen Speicherbereichs, da ihre Erstellung keinen neuen virtuellen Speicherbereich erfordert.
- Im Header math.h wurden neue Funktionen für Potenzberechnungen und Wurzelberechnungen hinzugefügt und dokumentiert: compoundn, pown und powr, rootn und rsqrt, die im ISO C23 Standard definiert sind. Varianten der Funktionen sind für die Typen float, double, long double, _FloatN und _FloatNx sowie für den generischen Typ aus tgmath.h implementiert.
- Auf der Linux-Plattform wurde die Funktion pthread_gettid_np implementiert, die ähnlich wie die Funktion gettid() eine eindeutige Thread-ID zurückgibt, jedoch eine erweiterte Fehlerprüfung bietet (bei unbestimmtem Verhalten wird der Prozess beendet).
- Es wurden Funktionen zur Berechnung von Absolutwerten hinzugefügt, die mit vorzeichenlosen Typen arbeiten: uabs, ulabs, ullabs und uimaxabs. Diese Funktionen werden Teil des zukünftigen C-Standards sein.
- Auf der Linux-Plattform bietet die Programmierschnittstelle termios.h Unterstützung für beliebige Übertragungsraten. Der Typ speed_t wurde neu definiert und entspricht nun dem Typ 'unsigned int', wie im Linux-Kernel.
- In den thread-lokalen Cache (tcache), der in der Funktion malloc verwendet wird, wurde die Unterstützung für das Caching großer Speicherblöcke hinzugefügt. Die maximale Blockgröße kann über die Einstellung glibc.malloc.tcache_max angepasst werden, die Werte von bis zu 4194304 akzeptiert. Die Cache-Leistung für kleine Blöcke wurde verbessert.
- Das Konfigurationsskript "configure" hat die Option „—enable-sframe“ hinzugefügt, die die Unterstützung des SFrame-Formats aktiviert, das zur Darstellung von Stack-Trace-Informationen verwendet wird und von der Funktion backtrace unterstützt wird. Für die Nutzung von SFrame ist mindestens die Version 2.45 von binutils erforderlich.
- Optimierte Varianten der mathematischen Funktionen acospif, asinpif, atanpif, atan2pif, cospif, sinpif und tanpif wurden aus dem Projekt CORE-MATH übernommen.
- Der Testfall wurde erheblich erweitert und deckt nun die Funktionsweise verschiedener Varianten der printf- und scanf-Funktionsfamilien ab.
- Code zur Erkennung von Intel-Prozessoren auf Basis der Mikroarchitekturen Arrow Lake, Panther Lake, Clearwater Forest und Diamond Rapids wurde hinzugefügt.
- Die Unterstützung für die z17-Plattform (neue Generation der IBM Z/S390-Mainframes) wurde hinzugefügt.
- Die Konfiguration glibc.rtld.execstack hat die Unterstützung des Kompatibilitätsmodus hinzugefügt, um Programme zu unterstützen, die einen ausführbaren Stack durch dynamisch geladene Bibliotheken benötigen.
- Die Header-Datei termio.h und die Definition der Struktur termio aus sys/ioctl.h wurden entfernt. Die Programmierschnittstelle termio.h wurde bereits in POSIX.1 (1988) als veraltet erklärt und durch termios.h ersetzt.
- Für den Bau von Glibc sind nun mindestens die Versionen GCC 12.1 und GNU Binutils 2.39 erforderlich.
- Sicherheitsanfälligkeiten wurden behoben:
- CVE-2025-0395 — Bufferüberlauf in der Funktion assert(). Der Überlauf tritt auf, wenn ein zu großer Programmname (argv[0]) angegeben wird. Das Problem wird als ungefährlich eingestuft, da 4 Byte außerhalb des Puffers geschrieben werden, deren Inhalt vom Angreifer nicht kontrolliert werden kann. Interessant ist jedoch das Auftreten einer Schwachstelle in den Debugging-Funktionen, die aufgrund eines Fehlers bei der Ausgabe des aktuellen Anwendungsnamens entsteht.
- CVE-2025-5702, CVE-2025-5745 — Schwachstellen in der Implementierung der Funktionen strcmp und strncmp für Power10-Prozessoren, die zu einem Absturz beim Speichern und Wiederherstellen der Vektorregister v20-v31 führen, die zwischen Funktionsaufrufen gespeichert werden sollten. Diese Schwachstelle kann zur Überschreibung oder Ermittlung des Inhalts dieser Registerdaten verwendet werden, die von anderen Funktionen verwendet werden.
- CVE-2025-8058 — Schwachstelle in der Funktion regcomp, die zu einem doppelten Speicherkontrollabfrage (double-free) führt.
Zusätzlich kann die Veröffentlichung des GNU Binutils 2.45 erwähnt werden, die Programme wie GNU Linker, GNU Assembler, nm, objdump, strings, strip umfasst.
In der neuen Version von Binutils:
- In GNU Assembler:
- Unterstützung der neuesten Erweiterungen für RISC-V-, LoongArch- und AArch64-Architekturen hinzugefügt. Für x86 wurde die Unterstützung der in Zhaoxin PadLock-Prozessoren implementierten XMODX-Befehle hinzugefügt. Für RISC-V wurden die Unterstützung für die Befehle ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 und xmipslsp v1.0 hinzugefügt.
- Die Kompatibilität der Datengenerierung im SFrame-Format mit der SFrame V2-Spezifikation wurde gewährleistet. Unterstützung für die Generierung von Stapelverfolgungsinformationen (.sframe) aus CFI-Direktiven auf 64-Bit s390 (s390x)-Systemen hinzugefügt.
- Unterstützung der .errif- und .warnif-Direktiven für die Ausgabe von diagnostischen Nachrichten bei bestimmten Bedingungen hinzugefügt.
- Im Linker wurde die Unterstützung eines optionalen Arguments in der Option „—stats“ implementiert, das es ermöglicht, einen Dateinamen anzugeben, um Informationen über den Ressourcenverbrauch in verschiedenen Phasen des Linkvorgangs zu speichern. Der Dateiname kann auch über die Umgebungsvariable LD_STATS angegeben werden. Für RISC-V-Systeme wurde im Linker die Unterstützung neuer PLT- (Procedure Linkage Table)-Formate hinzugefügt.
- Verschiedene Verbesserungen bei der Unterstützung des SFrame-Formats wurden vorgenommen. Die Funktionen zur Arbeit mit SFrame wurden in die versionierte Bibliothek libsframe.so.2 ausgelagert.
- Im Disassembler und im Tool readelf wurde die Unterstützung der Architektur RISC-V erweitert.
Quelle: opennet.ru
