Die Veröffentlichung der Systembibliothek Glibc 2.41

Nach sechs Monaten Entwicklung wurde die Systembibliothek GNU C Library (glibc) 2.41 veröffentlicht, die vollständig den Anforderungen der Standards ISO C11 und POSIX.1-2017 entspricht. An der Erstellung der neuen Version waren 79 Entwickler beteiligt.

Zu den Verbesserungen in Glibc 2.41 gehören:

  • Für die Linux-Plattform wurden die neuen Funktionen sched_setattr und sched_getattr hinzugefügt, mit denen die Parameter des Task-Schedulers festgelegt oder abgerufen werden können. In der Praxis ermöglichen es diese Funktionen, Scheduling-Politiken wie SCHED_DEADLINE zu konfigurieren, die zusätzliche Parameter neben der Priorität verwenden.
  • Die Utility iconv unterstützt nun die In-Place-Codierungsumwandlung (wenn die Namen der Eingangs- und Ausgangsdateien übereinstimmen, erstellt iconv jetzt automatisch eine temporäre Datei und ersetzt nach Abschluss der Umwandlung die ursprüngliche Datei durch diese).
  • In die Header-Datei math.h wurden trigonometrische Funktionen aufgenommen, die im Standard C23 (TS 18661-4:2015) eingeführt wurden: acospi, asinpi, atan2pi, atanpi, cospi, sinpi und tanpi.
  • Optimierte Varianten der Funktionen exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf und tanhf wurden aus dem CORE-MATH-Projekt übertragen und verwenden die richtige Rundung.
  • Die Unterstützung für die ARM64 GCS (Guarded Control Stack) Erweiterung wurde hinzugefügt, um die Hardware-Schutzmaßnahmen für Rücksprungadressen aus Funktionen und das Blockieren von Exploits, die Rücksprungorientierte Programmierung (ROP — Return-Oriented Programming) nutzen, zu implementieren. ARM64 GCS ermöglicht es, die Technik des Schattenstapels (shadow stack) zum Schutz von Benutzerprozessen zu verwenden. Nach der Übergabe der Kontrolle an eine Funktion werden die Rücksprungadressen nicht nur im regulären Stapel, sondern auch in einem separaten Schattenstapel gespeichert, der nicht direkt verändert werden kann. Vor dem Verlassen der Funktion wird die Rücksprungadresse aus dem Schattenstapel extrahiert und mit der Rücksprungadresse aus dem Hauptstapel verglichen. Zum Erstellen von Glibc mit Unterstützung für GCS werden mindestens die Versionen binutils 2.44 und GCC 15 benötigt.
  • Es wurden erhebliche Verbesserungen bei der Codegenerierung und der Leistung mathematischer Funktionen für die ARM64/AArch64-Architektur vorgenommen. Optimierungen mit vektorisierten Anweisungen (SVE, Scalable Vector Extension) und SIMD-Erweiterungen (Neon) wurden implementiert.
  • Für Systeme mit ARM64/AArch64-Prozessoren wurde die Unterstützung des Mechanismus für Memory Protection Keys hinzugefügt, der zur Begrenzung des Zugriffs auf Speicherseiten verwendet wird, ohne die Speichertabellen zu ändern.
  • Für Systeme mit PowerPC64-Prozessoren wurde die Unterstützung erweiterter Anweisungen zum Schutz gegen Rücksprungorientiertes Programmieren in Exploits hinzugefügt.
  • Ein neuer Architekturantyp arch_kind_hygon wurde für die chinesischen x86-64-Prozessoren Hygon eingeführt, die auf AMD-Technologien basieren.
  • Der Testumfang für glibc wurde erheblich erweitert, wobei die Anzahl der Tests im Vergleich zur vorherigen Version von 5408 auf 6232 erhöht wurde.
  • Die Möglichkeit, die glibc-Builds mit C- und C++-Compilern zu testen, die sich von denen unterscheiden, die für das tatsächliche Build verwendet wurden, wurde hinzugefügt. Beispielsweise ‚configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"‘ und ‚configure TEST_CC="clang" TEST_CXX="clang++"‘.
  • In den Optionen, die in der Datei /etc/resolv.conf und der Umgebungsvariable RES_OPTIONS angegeben sind, wurde die Möglichkeit implementiert, das Präfix „-“ zu verwenden, um zuvor festgelegte Optionen mit diesem Namen zu entfernen. Beispielsweise, wenn in der Datei /etc/resolv.conf „options no-aaaa“ angegeben ist, wird beim Start des Prozesses mit der Umgebungsvariable „RES_OPTIONS=-no-aaaa“ das Verbot, DNS-Anfragen zur Abfrage von AAAA-Einträgen zu senden, aufgehoben.
  • Der DNS-Resolver unterstützt jetzt die Option „strict-error“. Bei dieser wird die Funktion getaddrinfo(), sofern der Adresstyp (AF_UNSPEC) nicht ausdrücklich angegeben ist, versuchen, die A (IPv4) und AAAA (IPv6) Einträge von einem anderen DNS-Server abzurufen, wenn die Anfrage für den A- oder AAAA-Eintrag beim ersten DNS-Server fehlgeschlagen ist. Ohne die Angabe von „strict-error“ wird in einem solchen Fall die Adresse zurückgegeben, die aus der erfolgreich verarbeiteten Anfrage resultiert, während das Ergebnis der fehlgeschlagenen Anfrage ignoriert wird. Zum Beispiel, wenn der Server ein „A“-Eintrag zurückgegeben wurde, aber ein Fehler bei der Anfrage nach „AAAA“ aufgetreten ist, gibt getaddrinfo ohne die Option „strict-error“ sofort nur die IPv4-Adresse zurück, während getaddrinfo mit der Option „strict-error“ versuchen wird, die Anfragen an einen anderen DNS-Server zu wiederholen.
  • Die Zeichencodierungen, Informationen zu Zeichentypen und Transliterationstabellen wurden aktualisiert, um die Unicode-Spezifikation 16.0.0 zu unterstützen.
  • Das Makro „_ISOC2Y_SOURCE“ wurde hinzugefügt, um die in der Entwurfsrichtlinie C2Y definierten Funktionen zu aktivieren. Diese Funktionen können auch mit dem Makro _GNU_SOURCE und über Compiler-Flags („gcc -std=gnu2y“) aktiviert werden.
  • Einbenchtest-Toolkit wurde implementiert, um die Leistung verschiedener Funktionen (hauptsächlich mathematischer Art) zu verfolgen.
  • Die Konfiguration glibc.rtld.execstack wurde hinzugefügt, die die Verwendung eines ausführbaren Stacks ausdrücklich verbieten kann.
  • Die Unterstützung für das erweiterbare ABI rseq (restartable sequences) wurde hinzugefügt, das einen Mechanismus für die schnelle atomare Ausführung von Operationen bietet (im Falle einer Unterbrechung der Operation durch einen anderen Thread wird der Zustand zurückgesetzt und ein neuer Versuch zur Ausführung unternommen). In der neuen Version ist die Verwendung erweiterter Funktionen in rseq möglich, die im ursprünglichen ABI fehlen, wie z. B. die Identifikatoren für parallele Ausführung (mm_cid, memory-map concurrency ID) und die NUMA-Knotennummern (node_id).
  • Die Unterstützung für den Port für Big-Endian-Systeme ARC (arceb-linux-gnu) wurde eingestellt.
  • Eine Sicherheitsanfälligkeit (CVE-2025-039) wurde behoben, die zu einem Pufferüberlauf bei der Ausführung der Funktion assert() führen kann. Der Überlauf tritt auf, wenn ein zu langer Programmname (argv[0]) angegeben wird. Das Problem wird als unkritisch betrachtet, da 4 Bytes außerhalb des Puffers geschrieben werden, dessen Inhalt nicht vom Angreifer kontrolliert werden kann. Interessant ist jedoch der Umstand, dass in Debugging-Funktionen eine Sicherheitsanfälligkeit aufgrund eines Fehlers beim Ausgeben des Namens der aktuellen Anwendung aufgetaucht ist.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster