Nach sechs Monaten Entwicklung Release der Systembibliothek (glibc) , die vollständig den Anforderungen der ISO C11- und POSIX.1-2017-Standards entspricht. Die neue Version enthält Korrekturen von 67 Entwicklern.
Aus den in Glibc 2.32 implementierten gehören:
- Die Unterstützung für Synopsys ARC HS-Prozessoren (ARCv2 ISA) wurde hinzugefügt. Für das Porting sind mindestens binutils 2.32, gcc 8.3 und der Linux-Kernel 5.1 erforderlich. Drei ABI-Varianten werden unterstützt: arc-linux-gnu, arc-linux-gnuhf und arceb-linux-gnu (big-endian);
- Die Ladefunktionen für Audit-Module, die in den Sektionen DT_AUDIT und
DT_DEPAUDIT der ausführbaren Datei angegeben sind, wurden implementiert. - Für die Architektur powerpc64le wurde die Unterstützung für den IEEE128 long double-Typ eingeführt, die bei der Erstellung mit der Option „-mabi=ieeolongdouble“ aktiviert wird.
- Einige APIs sind mit dem GCC-Attribut ‘access’ annotiert, was bei der Kompilierung mit GCC 10 qualitativ hochwertigere Warnungen zur Erkennung von möglichen Bufferüberläufen und anderen Arten von Grenzwertüberschreitungen generiert.
- Für Linux-Systeme wurden die Funktionen pthread_attr_setsigmask_np und
pthread_attr_getsigmask_np implementiert, die es der Anwendung ermöglichen, eine Signalmaske für Threads anzugeben, die mit pthread_create erstellt wurden. - Die Zeichencodierungen, Informationen über Symboltypen und Transliterationstabellen wurden aktualisiert, um die Unicode-Spezifikation 13.0.0 zu unterstützen;
- Eine neue Header-Datei wurde hinzugefügt, die die Variable __libc_single_threaded definiert, die in Anwendungen für Single-Thread-Optimierungen verwendet werden kann.
- Die Funktionen sigabbrev_np und sigdescr_np wurden hinzugefügt, die eine verkürzte Bezeichnung und eine Beschreibung des Signals zurückgeben (zum Beispiel „HUP“ und „Hangup“ für SIGHUP).
- Die Funktionen strerrorname_np und strerrordesc_np wurden hinzugefügt, die den Namen und die Beschreibung eines Fehlers zurückgeben (zum Beispiel „EINVAL“ und „Ungültiges Argument“ für EINVAL).
- Für die ARM64-Plattform wurde das Flag „—enable-standard-branch-protection“ (oder -mbranch-protection=standard in GCC) hinzugefügt, das den Mechanismus ARMv8.5-BTI (Branch Target Indicator) aktiviert, um die Ausführung von Befehlssätzen zu schützen, auf die beim Verzweigen keine Übergänge gemacht werden sollten. Die Blockierung von Übergängen zu willkürlichen Code-Abschnitten wurde implementiert, um der Erstellung von Gadgets in Exploits zu begegnen, die Techniken des Return-Oriented Programming (ROP) verwenden (der Angreifer versucht nicht, eigenen Code im Speicher unterzubringen, sondern arbeitet mit bereits vorhandenen Segmenten von Maschinenanweisungen, die mit einer Rückkehranweisung enden, aus denen eine Kette von Aufrufen aufgebaut wird, um die gewünschte Funktionalität zu erhalten).
- Eine umfassende Bereinigung veralteter Funktionen wurde durchgeführt, einschließlich der Entfernung der Optionen «—enable-obsolete-rpc» und «—enable-obsolete-nsl», sowie der Header-Datei . Die Funktionen sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore und sigset, die Arrays sys_siglist, _sys_siglist und sys_sigabbrev, sowie die Symbole sys_errlist, _sys_errlist, sys_nerr und _sys_nerr und das NSS-Modul hesiod wurden als veraltet erklärt.
- ldconfig wurde standardmäßig auf das neue Format ld.so.cache umgestellt, das in glibc bereits seit fast 20 Jahren unterstützt wird.
- Sicherheitsanfälligkeiten wurden behoben:
- CVE-2016-10228 — Ein Deadlock in der Utility iconv, der auftritt, wenn sie mit der Option «-c» ausgeführt wird, während ungültige Mehrbyte-Daten verarbeitet werden.
- CVE-2020-10029 — Stack-Korruption beim Aufruf trigonometrischer Funktionen mit einem pseudonull-Argument.
- CVE-2020-1752 — Zugriff auf einen Speicherbereich nach seiner Freigabe (use-after-free) in der Funktion glob beim Auflösen eines Verweises auf das Home-Verzeichnis («~user») in Pfaden.
- CVE-2020-6096 — Fehlerhafte Verarbeitung auf der ARMv7-Plattform von negativen Werten des Parameters in memcpy() und memmove(), der die Größe des zu kopierenden Bereichs bestimmt. die Ausführung von Code bei der Verarbeitung spezifisch formatierter Daten in den Funktionen memcpy() und memmove(). Es ist bemerkenswert, dass das Problem fast fast zwei Monate seit der öffentlichen Offenlegung und fünf Monate seit der Benachrichtigung der Glibc-Entwickler nicht behoben.
Quelle: opennet.ru
