Erscheinung der Systembibliothek Glibc 2.35

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

Zu den Verbesserungen in Glibc 2.35 gehören:

  • Die Unterstützung für das Locale „C.UTF-8“ wurde hinzugefügt, das Sortierregeln für alle Unicode-Codes umfasst, aber zur Einsparung von Speicherplatz auf die Verwendung des ASCII-Bereichs in den Funktionen fnmatch, regexec und regcomp beschränkt ist. Das Locale benötigt etwa 400 KB, von denen 346 KB Daten für LC_CTYPE für Unicode sind, und muss separat installiert werden (ist nicht in Glibc integriert).
  • Die Zeichencodierungsdaten, Informationen zu Zeichentypen und Transliterierungstabellen wurden aktualisiert, um die Unicode-Spezifikation 14.0.0 zu unterstützen.
  • In und 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 und TS 18661-3:2015 beschrieben und wurden in den Entwurf des zukünftigen C-Standards ISO C2X aufgenommen.
  • In und sind Funktionen und Makros implementiert, um das Minimum und Maximum von Gleitkommazahlen mit den Typen float, long double, _FloatN und _FloatNx zu ermitteln. Diese sind in der Spezifikation IEEE 754-2019 beschrieben und wurden in einen Entwurf des zukünftigen C-Standards ISO C2X aufgenommen: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • In wurden Konstanten für Gleitkommazahlen 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 Funktionen exp10 wurden im Header entsprechende, typungebundene Makros hinzugefügt.
  • In wurde das Makro _PRINTF_NAN_LEN_MAX hinzugefügt, das im Entwurf des Standards ISO C2X vorgeschlagen wurde.
  • Den Funktionen der printf-Familie wurden die Format-Spezifizierer "%b" und "%B" hinzugefügt, um ganze Zahlen in binärer Darstellung auszugeben.
  • Im System des dynamischen Linkens wurde ein neuer DSO-Sortieralgorithmus implementiert, der die Tiefensuche (DFS) nutzt, um Leistungsprobleme bei der Verarbeitung zirkulärer Abhängigkeiten zu lösen. Zur Auswahl des DSO-Sortieralgorithmus wurde der Parameter glibc.rtld.dynamic_sort eingeführt, dem der Wert "1" zugewiesen werden kann, um auf den alten Algorithmus zurückzugreifen.
  • Die ABI wurde um die Unterstützung der neuen Funktion ‘__memcmpeq’ erweitert, die von Compilern verwendet wird, um die Nutzung von ‘memcmp’ zu optimieren, wenn der von dieser Funktion zurückgegebene Wert lediglich zur Überprüfung des Status des Abschlusses der Operation verwendet wird.
  • Die Unterstützung für die automatische Thread-Registrierung wurde hinzugefügt, indem der Systemaufruf rseq (restartable sequences) eingeführt wurde, der ab dem Linux-Kernel 4.18 verfügbar ist. Der Systemaufruf rseq ermöglicht es, eine ununterbrochene Ausführung einer Gruppe von Anweisungen zu organisieren, die nicht unterbrochen wird und das Ergebnis der letzten Anweisung in der Gruppe bestätigt. Er bietet im Wesentlichen ein Mittel für die sehr schnelle atomare Ausführung von Operationen, die im Falle einer Unterbrechung durch einen anderen Thread verworfen und erneut versucht werden.
  • Eine symbolische Verknüpfung zu /usr/bin/ld.so wurde hinzugefügt.
  • Die Standardkonfiguration aller ausführbaren Dateien eingebetteter Programme und Test-Suites im PIE-Modus (Position Independent Executable) wurde sichergestellt. Um dieses Verhalten zu deaktivieren, steht die Option „—disable-default-pie“ zur Verfügung.
  • Für Linux wurde die Einstellung glibc.malloc.hugetlb hinzugefügt, die die Implementierung von malloc auf die Verwendung des Systemaufrufs madvise mit dem FLAG MADV_HUGEPAGE für mmap und sbrk umschaltet oder die Verwendung von großen Speicherseiten durch die Angabe des FLAGS MAP_HUGETLB in den mmap-Aufrufen ermöglicht. Im ersten Fall kann eine Leistungssteigerung erzielt werden, 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 Einfügung von Informationen über das Unwinding des Call-Stacks verwendet werden kann.
  • Die Unterstützung der Architektur OpenRISC (or1k-linux-gnu) im Modus der softwarebasierten Verarbeitung von Gleitkommaoperationen (soft-float) wurde hinzugefügt. Für den Port sind binutils 2.35, GCC 11 und der Linux-Kernel 5.4 erforderlich.
  • Ein neuer Build-Flag „—with-rtld-early-cflags“ wurde hinzugefügt, mit dem zusätzliche Compilerflags angegeben werden können, die beim Erstellen des Einstiegscodes 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, um Wettlaufbedingungen beim Setzen des steuernden Terminals für einen neuen Prozess auszuschließen.
  • Für Anwendungen, die mit Glibc und GCC 12+ kompiliert wurden, wurde der Schutzmodus „_FORTIFY_SOURCE=3“ implementiert, der mögliche Pufferüberläufe bei der Ausführung von Stringfunktionen, die in der Headerdatei string.h definiert sind, erkennt. Der Unterschied zu „_FORTIFY_SOURCE=2“ besteht in zusätzlichen Überprüfungen, die potenziell zu einer Verringerung der Leistung führen können.
  • Die Unterstützung für Intel MPX (Memory Protection Extensions), die zur Überprüfung von Zeigern auf die Einhaltung von Speichergrenzen verwendet wird, wurde eingestellt (diese Technologie hat sich nicht durchgesetzt und wurde bereits aus GCC und LLVM entfernt).
  • Das prelink-System und die dazugehörigen Umgebungsvariablen LD_TRACE_PRELINKING und LD_USE_LOAD_BIAS werden in der nächsten Version als veraltet deklariert und entfernt.

    Sicherheitsanfälligkeiten wurden behoben:

    • CVE-2022-23218, CVE-2022-23219 — Pufferüberlauf in den Funktionen svcunix_create und clnt_create, verursacht durch das Kopieren des Inhalts des Parameterdateinamens in den Stack ohne Größenüberprüfung der kopierten Daten. Für Anwendungen, die ohne Stack-Schutz gebaut wurden und das 'unix'-Protokoll verwenden, kann diese Schwachstelle die Ausführung von Code eines Angreifers bei der Verarbeitung sehr langer Dateinamen ermöglichen.
    • CVE-2021-3998 — Schwachstelle in der Funktion realpath(), verursacht durch die Rückgabe eines inkorrekten Wertes unter bestimmten Bedingungen, der nicht bereinigte Rückstandsdaten aus dem Stack enthält. Bei der SUID-root Anwendung fusermount kann die Schwachstelle ausgebeutet werden, um vertrauliche Informationen aus dem Speicher des Prozesses zu erhalten, beispielsweise Informationen über Zeiger.
    • CVE-2021-3999 — Ein Byte-Pufferüberlauf in der Funktion getcwd(). Dieses Problem besteht seit 1995. Um die Überlaufbedingung zu erzeugen, genügt es, in einem separaten Namensraum mit Einhängepunkten den Aufruf chdir() für das Verzeichnis '/' durchzuführen.

    Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster