Glibc 2.31 Systembibliotheksversion

Nach sechs Monaten Entwicklungszeit veröffentlicht Veröffentlichung der Systembibliothek GNU C-Bibliothek (glibc) 2.31, das vollständig den Anforderungen der Standards ISO C11 und POSIX.1-2008 entspricht. Die neue Version enthält Korrekturen von 58 Entwicklern.

Von den in Glibc 2.31 implementierten Verbesserungen Sie können feststellen:

  • Das Makro _ISOC2X_SOURCE wurde hinzugefügt, um die im Entwurf des zukünftigen ISO-Standards definierten Funktionen zu aktivieren C2X. Diese Funktionen sind auch aktiviert, wenn das Makro _GNU_SOURCE verwendet wird oder wenn gcc mit dem Flag „-std=gnu2x“ erstellt wird.
  • Für in der Header-Datei „math.h“ definierte Funktionen, die ihre Ergebnisse auf einen kleineren Typ runden, werden die entsprechenden generischen Typmakros in der Datei „tgmath.h“ vorgeschlagen, wie in den Spezifikationen TS 18661-1:2014 und TS gefordert 18661-3: 2015;
  • Funktion pthread_clockjoin_np() hinzugefügt, die unter Berücksichtigung des Timeouts auf den Abschluss des Threads wartet (wenn das Timeout vor dem Abschluss auftritt, gibt die Funktion einen Fehler zurück). Im Gegensatz zu pthread_timedjoin_np(), in pthread_clockjoin_np() ist es möglich, den Typ des Timers für die Berechnung des Timeouts zu definieren – CLOCK_MONOTONIC (berücksichtigt die Zeit, die das System im Schlafmodus verbringt) oder CLOCK_REALTIME;
  • Der DNS-Resolver unterstützt jetzt die Option „trust-ad“ in /etc/resolv.conf und das Flag „RES_TRUSTAD“ in _res.options. Wenn es gesetzt ist, wird das Flag „DNSSEC“ in DNS-Anfragen übertragen AD (authentifizierte Daten). In diesem Modus wird das vom Server gesetzte AD-Flag für Anwendungen verfügbar, die Funktionen wie res_search() aufrufen. Wenn die vorgeschlagenen Optionen nicht festgelegt sind, gibt Glibc standardmäßig das AD-Flag in Anfragen nicht an und löscht es automatisch in Antworten, was darauf hinweist, dass DNSSEC-Prüfungen fehlen;
  • Zum Erstellen funktionierender Systemaufrufbindungen für Glibc ist nicht mehr die Installation der Linux-Kernel-Header-Dateien erforderlich. Die Ausnahme bildet die 64-Bit-RISC-V-Architektur;
  • Eliminiert Verwundbarkeit CVE-2019-19126, wodurch Sie den Schutz umgehen können
    ASLR in Programmen mit dem Setuid-Flag und bestimmen Sie das Adresslayout in geladenen Bibliotheken durch Manipulation der Umgebungsvariablen LD_PREFER_MAP_32BIT_EXEC.

Änderungen, die die Kompatibilität beeinträchtigen:

  • totalorder(), totalordermag() und ähnliche Funktionen für andere Gleitkommatypen akzeptieren jetzt Zeiger als Argumente, um Warnungen vor der Konvertierung von Werten in den Status zu eliminieren NaN, in Übereinstimmung mit den Empfehlungen von TS 18661-1, vorgeschlagen für den zukünftigen C2X-Standard.
    Vorhandene ausführbare Dateien, die Gleitkommaargumente direkt übergeben, werden ohne Änderung weiterhin ausgeführt.

  • Die seit langem veraltete stime-Funktion ist für mit Glibc verknüpfte Binärdateien nicht mehr verfügbar und ihre Definition wurde aus time.h entfernt. Um die Systemzeit einzustellen, verwenden Sie die Funktion „clock_settime“. In Zukunft planen wir, die veraltete ftime-Funktion sowie die Header-Datei sys/timeb.h zu entfernen (gettimeofday oder clock_gettime sollte anstelle von ftime verwendet werden);
  • Die Funktion gettimeofday übergibt keine Informationen mehr über die systemweite Zeitzone (diese Funktion war in den Tagen von 4.2-BSD relevant und ist seit vielen Jahren veraltet). Dem Argument „tzp“ sollte nun ein Nullzeiger übergeben werden und die Funktion „localtime()“ sollte verwendet werden, um Zeitzoneninformationen basierend auf der aktuellen Zeit abzurufen. Wenn Sie gettimeofday mit einem „tzp“-Argument ungleich Null aufrufen, werden die leeren Felder „tz_minuteswest“ und „tz_dsttime“ in der Zeitzonenstruktur zurückgegeben. Die Funktion gettimeofday selbst ist unter POSIX veraltet (clock_gettime wird anstelle von gettimeofday empfohlen), es gibt jedoch keine Pläne, sie aus Glibc zu entfernen;
  • settimeofday unterstützt nicht mehr die gleichzeitige Übergabe von Parametern zum Einstellen der Uhrzeit und des zeitkorrigierenden Offsets. Beim Aufruf von settimeofday muss nun eines der Argumente (Zeit oder Offset) auf null gesetzt werden, sonst schlägt der Funktionsaufruf mit einem EINVAL-Fehler fehl. Wie gettimeofday ist die Funktion settimeofday in POSIX veraltet und es wird empfohlen, sie durch die Funktion clock_settime oder die Funktionsfamilie adjtime zu ersetzen;
  • Die Unterstützung für die SPARC ISA v7-Architektur wurde eingestellt (die v8-Unterstützung bleibt vorerst erhalten, jedoch nur für Prozessoren, die CAS-Anweisungen unterstützen, wie z. B. LEON-Prozessoren, nicht für SuperSPARC-Prozessoren).
  • Wenn die Kopplung fehlschlägt in „faul", bei dem der Linker erst beim ersten Aufruf dieser Funktion nach Symbolen einer Funktion sucht, erzwingt die dlopen-Funktion nun die Beendigung des Prozesses (zuvor gab sie bei einem Fehler NULL zurück);
  • Für die MIPS-Hard-Float-ABI wird jetzt der ausführbare Stack verwendet, es sei denn, der Build schränkt die Verwendung des Linux 4.8+-Kernels explizit über den Parameter „-enable-kernel=4.8.0“ ein (bei Kerneln bis 4.8 kommt es zu Abstürzen). bei einigen MIPS-Konfigurationen beobachtet);
  • Die Bindungen rund um Systemaufrufe im Zusammenhang mit der Zeitmanipulation wurden verschoben, um den time64-Systemaufruf zu verwenden, falls vorhanden (auf 32-Bit-Systemen probiert Glibc zunächst neue Systemaufrufe aus, die den 64-Bit-Zeittyp manipulieren, und wenn es keine gibt, stürzt sie ab). zurück zu den alten 32-Bit-Aufrufen).

Source: opennet.ru

Kommentar hinzufügen