Nach sechs Monaten Entwicklung wurde die Version 2.42 der GNU C Library (glibc) veröffentlicht, die vollständig den Anforderungen der Standards ISO C23 und POSIX.1-2024 entspricht. An der Erstellung der neuen Version waren 70 Entwickler beteiligt.
Zu den in Glibc 2.42 umgesetzten Verbesserungen gehören:
- Die Funktion pthread_create unterstützt jetzt leichtgewichtige Schutzseiten für den Stack (stack guard page), deren Zugriff eine Ausnahme auslöst und den Prozess beendet (SIGSEGV). Die Implementierung basiert auf dem Flag MADV_GUARD_INSTALL, das im Systemaufruf madvise eingeführt wurde und ab Kernelversion 6.13 von Linux unterstützt wird. Im Vergleich zu einem Mapping im PROT_NONE-Modus ermöglichen Schutzseiten eine effizientere Blockierung der Codeausführung außerhalb des zugewiesenen Speichers, da ihre Erstellung keine zusätzliche virtuelle Speicherfläche erfordert.
- Neue Potenzierungs- und Wurzelfunktionen compoundn, pown und powr, rootn und rsqrt, die im Standard ISO C23 definiert sind, wurden hinzugefügt und in der Header-Datei math.h dokumentiert. Die Funktionalitäten sind für die Typen float, double, long double, _FloatN und _FloatNx sowie für den generischen Typ aus tgmath.h implementiert.
- Die Funktion pthread_gettid_np wurde auf der Linux-Plattform implementiert, die, ähnlich wie die Funktion gettid(), eine eindeutige Thread-ID zurückgibt, sich jedoch durch eine umfangreiche Fehlerprüfung unterscheidet (im Fall eines undefinierten Verhaltens wird der Prozess beendet).
- Es wurden Funktionen zur Berechnung von Absolutwerten für unsigned Typen hinzugefügt: uabs, ulabs, ullabs und uimaxabs. Diese Funktionen werden in den zukünftigen C-Standard aufgenommen.
- Auf der Linux-Plattform wurde im API termios.h die Unterstützung für beliebige Übertragungsraten implementiert. Der Typ speed_t wurde neu definiert und entspricht nun dem Typ „unsigned int“, wie im Linux-Kernel.
- Im 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 überschrieben werden und bis zu 4194304 betragen. Die Cache-Leistung für kleine Blöcke wurde verbessert.
- Im Build-Skript configure wurde die Option „—enable-sframe“ hinzugefügt, die die Unterstützung für das SFrame-Format aktiviert, das zur Darstellung von Informationen über den Stack-Trace verwendet wird und von der Funktion backtrace unterstützt wird. Für die Verwendung von SFrame wird mindestens Version 2.45 von binutils benötigt.
- Vom Projekt CORE-MATH wurden optimierte Varianten der mathematischen Funktionen acospif, asinpif, atanpif, atan2pif, cospif, sinpif und tanpif übernommen.
- Der Testumfang wurde erheblich erweitert und umfasst nun die Funktionsweise verschiedener Varianten von printf- und scanf-Funktionsfamilien.
- Code zur Identifizierung von Intel-Prozessoren auf der Basis der Mikroarchitektur Arrow Lake, Panther Lake, Clearwater Forest und Diamond Rapids wurde hinzugefügt.
- Unterstützung für die Plattform z17 (neue Generation von IBM Z/S390-Mainframes) wurde hinzugefügt.
- Die Einstellung glibc.rtld.execstack hat Unterstützung für den Kompatibilitätsmodus erhalten, um Programme zu unterstützen, die einen ausführbaren Stack über 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 obsolet 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.
- Behobene Sicherheitsanfälligkeiten:
- CVE-2025-0395 – Pufferüberlauf beim Ausführen der Funktion assert(). Der Überlauf tritt auf, wenn ein zu großer Programmname (argv[0]) angegeben wird. Das Problem wird als nicht gefährlich angesehen, da 4 Bytes außerhalb des Puffers geschrieben werden, deren Inhalt der Angreifer nicht kontrollieren kann. Interessant ist der Umstand, dass eine Schwachstelle in den Debugging-Funktionen aufgrund eines Fehlers beim Ausgeben des Namens der aktuellen Anwendung auftritt.
- CVE-2025-5702, CVE-2025-5745 – Schwachstellen in der Implementierung der Funktionen strcmp und strncmp für Power10-Prozessoren, die zu einem Fehler beim Speichern und Wiederherstellen der Vektore registrierten v20-v31 führen, die zwischen Funktionsaufrufen gespeichert werden sollten. Diese Schwachstelle kann eingesetzt werden, um den Inhalt der Registerdaten, die von der Funktion verwendet werden, zu überschreiben oder zu bestimmen.
- CVE-2025-8058 – Schwachstelle in der Funktion regcomp, die zu einem doppelten Speicherfreigabefehler (double-free) führt.
Darüber hinaus ist die Veröffentlichung des Satzes von Systemwerkzeugen GNU Binutils 2.45 zu erwähnen, der Programme wie den GNU Linker, den GNU Assembler, nm, objdump, strings, strip umfasst.
In der neuen Version von Binutils:
- Im GNU Assembler:
- Unterstützung für die neuesten Erweiterungen der Architekturen RISC-V, LoongArch und AArch64 wurde hinzugefügt. Für x86 wurde Unterstützung für die XMODX-Anweisungen implementiert, die in den Zhaoxin PadLock-Prozessoren realisiert sind. Für RISC-V wurden die Anweisungen 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 unterstützt.
- Die Kompatibilität der Datengenerierung im SFrame-Format mit der Spezifikation SFrame V2 wurde sichergestellt. Unterstützung für die Generierung von Stack-Trace-Informationen (.sframe) aus CFI-Direktiven auf 64-Bit s390 (s390x) Systemen wurde hinzugefügt.
- Die Unterstützung für die Direktiven .errif und .warnif wurde hinzugefügt, um diagnostische Nachrichten unter bestimmten Bedingungen auszugeben.
- Im Linker wurde die Option „—stats“ um ein optionales Argument erweitert, über das der Name einer Datei für die Speicherung von Ressourcenverbrauchsinformationen in verschiedenen Phasen des Linkvorgangs angegeben werden kann. Der Dateiname kann auch über die Umgebungsvariable LD_STATS angegeben werden. Für RISC-V-Systeme wurde die Unterstützung neuer PLT-Formate (Procedure Linkage Table) in den Linker aufgenommen.
- Verschiedene Verbesserungen in Bezug auf die Unterstützung des SFrame-Formats wurden implementiert. Funktionen zur Verarbeitung von SFrame wurden in die versionierte Bibliothek libsframe.so.2 verschoben.
- Im Disassembler und im Tool readelf wurde die Unterstützung für die RISC-V-Architektur erweitert.
Quelle: opennet.ru
