Glibc 2.35 Systembibliotheksversion

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

Zu den in Glibc 2.35 implementierten Verbesserungen gehören:

  • Unterstützung für das Gebietsschema „C.UTF-8“ hinzugefügt, das Sortierregeln für alle Unicode-Codes enthält, aber aus Platzgründen auf die Verwendung von ASCII-Bereichen in den Funktionen fnmatch, regexec und regcomp beschränkt ist. Das Gebietsschema ist etwa 400 KB groß, wovon 346 KB LC_CTYPE-Daten für Unicode sind, und erfordert eine separate Installation (nicht in Glibc integriert).
  • Codierungsdaten, Zeichentypinformationen und Transliterationstabellen wurden aktualisiert, um die Unicode 14.0.0-Spezifikation zu unterstützen.
  • und implementieren Funktionen und Makros, die das Ergebnis auf einen engeren Typ runden: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN und fMxfmafNx. Die Funktionen werden in den Spezifikationen TS 18661-1:2014, TS 18661-3:2015 beschrieben und dem Entwurf des zukünftigen ISO C2X C-Standards hinzugefügt.
  • und implementieren Funktionen und Makros zum Ermitteln des Minimums und Maximums von Float-, Long Double-, _FloatN- und _FloatNx-Gleitkommazahlen, die in der Spezifikation IEEE 754-2019 beschrieben und dem Entwurf der Zukunft hinzugefügt werden ISO C2X-Standard: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • Konstanten für Gleitkommazahlen mit einfacher Genauigkeit zu 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 exp10-Funktionen wurden der Header-Datei entsprechende Makros hinzugefügt, die nicht an bestimmte Typen gebunden sind.
  • Das im Entwurf des ISO C2X-Standards vorgeschlagene Makro _PRINTF_NAN_LEN_MAX wurde zu hinzugefügt.
  • Der printf-Funktionsfamilie wurden die Formatspezifizierer „%b“ und „%B“ hinzugefügt, um Ganzzahlen in binärer Darstellung zu drucken.
  • Das dynamische Verknüpfungssystem implementiert einen neuen Sortieralgorithmus, DSO, der Tiefensuche (DFS) verwendet, um Leistungsprobleme bei Schleifenabhängigkeiten zu beheben. Zur Auswahl des DSO-Sortieralgorithmus wird der Parameter glibc.rtld.dynamic_sort vorgeschlagen, der auf „1“ gesetzt werden kann, um zum alten Algorithmus zurückzukehren.
  • Das ABI hat Unterstützung für eine neue Funktion „__memcmpeq“ hinzugefügt, die von Compilern verwendet wird, um die Verwendung von „memcmp“ zu optimieren, wenn der von dieser Funktion zurückgegebene Wert nur zur Überprüfung des Abschlussstatus einer Operation verwendet wird.
  • Unterstützung für die automatische Registrierung von Threads mithilfe des seit Linux-Kernel 4.18 bereitgestellten Systemaufrufs rseq (restartable sequences) hinzugefügt. Mit dem Systemaufruf rseq können Sie die kontinuierliche Ausführung einer Gruppe von Anweisungen organisieren, die nicht unterbrochen wird, und das Ergebnis durch die letzte Anweisung in der Gruppe bestätigen. Im Wesentlichen stellt es ein Mittel zur sehr schnellen atomaren Ausführung von Vorgängen bereit, die, wenn sie von einem anderen Thread unterbrochen werden, bereinigt und erneut versucht werden.
  • Symlink /usr/bin/ld.so hinzugefügt.
  • Die Standardassemblierung aller ausführbaren Dateien eingebetteter Programme und des Testsatzes im PIE-Modus (Position Independent Executable) wird bereitgestellt. Um dieses Verhalten zu deaktivieren, steht die Option „--disable-default-pie“ zur Verfügung.
  • Für Linux wurde eine glibc.malloc.hugetlb-Einstellung hinzugefügt, um die Umstellung der malloc-Implementierung auf die Verwendung des madvise-Systemaufrufs mit dem MADV_HUGEPAGE-Flag für mmap und sbrk oder die direkte Verwendung großer Speicherseiten durch Angabe des MAP_HUGETLB-Flags in mmap zu ermöglichen Anrufe. Im ersten Fall können Leistungssteigerungen erzielt werden, wenn Transparent Huge Pages im Madvise-Modus verwendet werden, und im zweiten Fall besteht die Möglichkeit, vom System reservierte große Seiten (Huge Pages) zu verwenden.
  • _dl_find_object-Funktion hinzugefügt, die zum Hinzufügen von Call-Stack-Abwicklungsinformationen verwendet werden kann.
  • Unterstützung für die OpenRISC-Architektur (or1k-linux-gnu) im Soft-Float-Modus hinzugefügt. Der Port erfordert Binutils 2.35, GCC 11 und Linux-Kernel 5.4.
  • Es wurde ein Build-Flag „--with-rtld-early-cflags“ hinzugefügt, mit dem zusätzliche Kompilierungsflags angegeben werden können, die beim Erstellen des anfänglichen Codes für die dynamische Verknüpfung verwendet werden.
  • Für die Linux-Plattform wurde die Funktion epoll_pwait2 hinzugefügt, die sich von epoll_wait durch die Angabe eines Timeouts mit Nanosekundengenauigkeit unterscheidet.
  • Funktion posix_spawn_file_actions_addtcsetpgrp_np hinzugefügt, um Race-Bedingungen beim Festlegen eines Steuerterminals für einen neuen Prozess zu beseitigen.
  • Für mit Glibc und GCC 12+ kompilierte Anwendungen ist der Schutzmodus „_FORTIFY_SOURCE=3“ implementiert, der mögliche Pufferüberläufe beim Ausführen von String-Funktionen erkennt, die in der Header-Datei string.h definiert sind. Der Unterschied zum Modus „_FORTIFY_SOURCE=2“ besteht in zusätzlichen Prüfungen, die möglicherweise zu einer Leistungseinbuße führen können.
  • Die Unterstützung für Intel MPX (Memory Protection Extensions), das zur Überprüfung von Zeigern auf Speichergrenzen verwendet wird, wurde eingestellt (diese Technologie hat sich nicht weit verbreitet und wurde bereits aus GCC und LLVM entfernt).
  • Der Prelink-Mechanismus und die zugehörigen Umgebungsvariablen LD_TRACE_PRELINKING und LD_USE_LOAD_BIAS sind veraltet und werden in einer zukünftigen Version entfernt.

    Behobene Schwachstellen:

    • CVE-2022-23218, CVE-2022-23219 – Pufferüberlauf in den Funktionen svcunix_create und clnt_create, verursacht durch Kopieren des Inhalts des Dateinamenparameters auf den Stapel, ohne die Größe der kopierten Daten zu überprüfen. Bei Anwendungen, die ohne Stack-Schutz erstellt wurden und das „Unix“-Protokoll verwenden, kann die Schwachstelle bei der Verarbeitung sehr langer Dateinamen zur Ausführung von Angreifercode führen.
    • CVE-2021-3998 ist eine Schwachstelle in der Funktion realpath(), die unter bestimmten Bedingungen durch die Rückgabe eines falschen Werts verursacht wird, der ungereinigte Restdaten aus dem Stapel enthält. Für das SUID-Root-Fusermount-Programm kann die Schwachstelle genutzt werden, um vertrauliche Informationen aus dem Prozessspeicher abzurufen, beispielsweise um Informationen über Zeiger zu erhalten.
    • CVE-2021-3999 – Einzelbyte-Pufferüberlauf in der Funktion getcwd(). Das Problem wird durch einen Fehler verursacht, der seit 1995 besteht. Um einen Überlauf zu verursachen, rufen Sie einfach chdir() für das Verzeichnis „/“ in einem separaten Mountpunkt-Namespace auf.

    Source: opennet.ru

Kommentar hinzufügen