Veröffentlichung der Systembibliothek Glibc 2.35

Nach sechsmonatiger Entwicklung wurde die systematische Bibliothek GNU C Library (glibc) 2.35 veröffentlicht, die vollständig den Anforderungen der ISO C11 und POSIX.1-2017 Standards entspricht. Der neue Release enthält Korrekturen von 66 Entwicklern.

Zu den Verbesserungen in Glibc 2.35 gehören:

  • Die Unterstützung für die Locale „C.UTF-8“ wurde hinzugefügt, die Sortierregeln für alle Unicode-Codes umfasst, jedoch zur Einsparung von Speicherplatz auf die Verwendung von ASCII-Bereichen in den Funktionen fnmatch, regexec und regcomp beschränkt ist. Die Locale benötigt etwa 400 KB, wovon 346 KB Daten von LC_CTYPE für Unicode sind, und erfordert eine separate Installation (ist nicht in Glibc integriert).
  • Die Kodierungsdaten, Informationen über Zeichentypen und Transliterationstabellen wurden aktualisiert, um die Unicode-Spezifikation 14.0.0 zu unterstützen.
  • In <math.h> und <tgmath.h> wurden Funktionen und Makros implementiert, die das Ergebnis auf einen engeren Typ runden: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN und fMfmafNx. Die Funktionen sind in den Spezifikationen TS 18661-1:2014, TS 18661-3:2015 beschrieben und wurden in den Entwurf des zukünftigen C-Standards ISO C2X aufgenommen.
  • In <math.h> und <tgmath.h> wurden Funktionen und Makros zur Bestimmung des Minimums und Maximums von Fließkommazahlen mit den Typen float, long double, _FloatN und _FloatNx implementiert, die in der Spezifikation IEEE 754-2019 beschrieben und in den Entwurf des zukünftigen C-Standards ISO C2X aufgenommen wurden: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • In <math.h> wurden Konstanten für Fließkommazahlen einfacher Genauigkeit hinzugefügt: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f und M_SQRT1_2f.
  • Für die Funktion exp10 wurden im Header <tgmath.h> entsprechende Makros hinzugefügt, die nicht an bestimmte Typen gebunden sind.
  • In <stdio.h> wurde das Makro _PRINTF_NAN_LEN_MAX hinzugefügt, das im Entwurf des Standards ISO C2X vorgeschlagen wurde.
  • In den printf-Funktionen wurden die Formatbezeichner „%b“ und „%B“ für die Ausgabe von Ganzzahlen im Binärformat hinzugefügt.
  • Im dynamischen Linksystem wurde ein neuer DSO-Sortieralgorithmus implementiert, der eine Tiefensuche (DFS) verwendet, um Leistungsprobleme bei der Verarbeitung zyklischer Abhängigkeiten zu lösen. Um den DSO-Sortieralgorithmus auszuwählen, wurde der Parameter glibc.rtld.dynamic_sort vorgeschlagen, dem der Wert „1“ zugewiesen werden kann, um zu dem alten Algorithmus zurückzukehren.
  • In ABI wurde die Unterstützung für die neue Funktion '__memcmpeq' hinzugefügt, die von Compilern zur Optimierung der Nutzung von 'memcmp' verwendet wird, wenn der Rückgabewert dieser Funktion nur zur Überprüfung des Abschlussstatus der Operation verwendet wird.
  • Die Unterstützung für die automatische Registrierung von Threads unter Verwendung des Systemaufrufs rseq (restartable sequences) wurde hinzugefügt, der seit Kernel Linux 4.18 verfügbar ist. Der Systemaufruf rseq ermöglicht die Organisation der ununterbrochenen Ausführung einer Gruppe von Anweisungen, die nicht unterbrochen werden und das Ergebnis der letzten Anweisung in der Gruppe bestätigen. Im Grunde genommen wird ein Mittel zur sehr schnellen atomaren Ausführung von Operationen bereitgestellt, die im Falle einer Unterbrechung durch einen anderen Thread zurückgesetzt werden und eine Wiederholungsversuch zur Ausführung unternommen wird.
  • Eine symbolische Verknüpfung zu /usr/bin/ld.so wurde hinzugefügt.
  • Die Standardkompilierung aller ausführbaren Dateien von eingebetteten Programmen und des Testsets im PIE-Modus (position independent executable) wurde sichergestellt. Um dieses Verhalten zu deaktivieren, gibt es die Option '—disable-default-pie'.
  • Für Linux wurde die Einstellung glibc.malloc.hugetlb hinzugefügt, die es ermöglicht, die Implementierung von malloc auf die Verwendung des Systemaufrufs madvise mit dem Flag MADV_HUGEPAGE für mmap und sbrk umzuschalten oder direkt große Seiten des Speichers durch Angabe des Flags MAP_HUGETLB in den mmap-Aufrufen zu verwenden. Im ersten Fall lässt sich eine Leistungssteigerung erzielen, wenn Transparent Huge Pages im madvise-Modus verwendet werden, während im zweiten Fall die Möglichkeit besteht, reservierte große Seiten (Huge Pages) des Systems zu nutzen.
  • Die Funktion _dl_find_object wurde hinzugefügt, die zur Hinzufügung von Informationen zur Aufruferstackentrollierung (unwind) verwendet werden kann.
  • Die Unterstützung für die OpenRISC-Architektur (or1k-linux-gnu) im Modus der Softwarehandhabung von Fließkommaoperationen (soft-float) wurde hinzugefügt. Für den Betrieb des Ports sind binutils 2.35, GCC 11 und Kernel Linux 5.4 erforderlich.
  • Ein Bauflag '—with-rtld-early-cflags' wurde hinzugefügt, mit dem zusätzliche Kompilierungsflags angegeben werden können, die beim Bauen des ursprünglichen Codes für das dynamische Binden verwendet werden.
  • Für die Linux-Plattform wurde die Funktion epoll_pwait2 hinzugefügt, die sich von epoll_wait dadurch unterscheidet, dass sie einen Timeout mit Nanosekunden-Genauigkeit angibt.
  • Die Funktion posix_spawn_file_actions_addtcsetpgrp_np wurde hinzugefügt, die Rennzustände beim Setzen des Steuerterminals für einen neuen Prozess ausschließt.
  • Für Anwendungen, die mit Glibc und GCC 12+ kompiliert wurden, wurde der Modus „_FORTIFY_SOURCE=3“ implementiert, der mögliche Pufferüberläufe bei der Ausführung von String-Funktionen, die in der Header-Datei string.h definiert sind, erkennt. Der Unterschied zum Modus „_FORTIFY_SOURCE=2“ besteht in zusätzlichen Prüfungen, die potenziell zu einer Leistungsminderung führen können.
  • Die Unterstützung für Intel MPX (Memory Protection Extensions), die zur Überprüfung von Zeigern auf die Einhaltung der Grenzen von Speicherbereichen verwendet werden, wurde eingestellt (diese Technologie hat sich nicht durchgesetzt und wurde bereits aus GCC und LLVM entfernt).
  • Das prelink-Verfahren sowie die damit verbundenen Umgebungsvariablen LD_TRACE_PRELINKING und LD_USE_LOAD_BIAS wurden als veraltet erklärt und werden in der nächsten Version entfernt.

    Behobene Sicherheitsanfälligkeiten:

    • CVE-2022-23218, CVE-2022-23219 — Pufferüberlauf in den Funktionen svcunix_create und clnt_create, verursacht durch das Kopieren des Inhalts eines Parameter mit dem Dateinamen in den Stack, ohne die Größe der kopierten Daten zu überprüfen. Bei Anwendungen, die ohne Stackschutz und unter Verwendung des „unix“-Protokolls kompiliert wurden, kann die Verwundbarkeit zur Ausführung von Angreifercode bei der Verarbeitung sehr langer Dateinamen führen.
    • CVE-2021-3998 — Schwachstelle in der Funktion realpath(), verursacht durch die Rückgabe eines inkorrekten Wertes unter bestimmten Bedingungen, der nicht initialisierte Restdaten aus dem Stack enthält. Bei SUID-root-Programmen wie fusermount kann diese Schwachstelle genutzt werden, um vertrauliche Informationen aus dem Speicher des Prozesses zu erhalten, beispielsweise um Informationen über Zeiger zu erlangen.
    • CVE-2021-3999 — Ein Byte Pufferüberlauf in der Funktion getcwd(). Das Problem wird durch einen Fehler verursacht, der seit 1995 besteht. Um den Überlauf auszulösen, ist es ausreichend, in einem separaten Namensraum für Einhängepunkte den Befehl chdir() für das Verzeichnis „/“ auszuführen.

    Quelle: opennet.ru

60GB SSD 8Gb DDR4