Nach sechs Monaten Entwicklungszeit Release der Systembibliothek (glibc) , die vollständig den Anforderungen der Standards ISO C11 und POSIX.1-2017 entspricht. Die neue Veröffentlichung umfasst Korrekturen von 67 Entwicklern.
Implementiert in Glibc 2.32 gehören:
- Unterstützung für Synopsys ARC HS Prozessoren (ARCv2 ISA) hinzugefügt. Für den Port wird mindestens binutils 2.32, gcc 8.3 und der Linux-Kernel 5.1 benötigt. Unterstützt werden drei Varianten des ABI arc-linux-gnu, arc-linux-gnuhf und arceb-linux-gnu (big-endian);
- Laden von Auditmodulen, die in den Abschnitten DT_AUDIT und
DT_DEPAUDIT der ausführbaren Datei angegeben sind, wurde implementiert. - Für die Architektur powerpc64le wurde Unterstützung für den Typ IEEE128 long double hinzugefügt, der bei der Erstellung mit der Option „-mabi=ieeolongdouble“ aktiviert wird.
- Einige APIs sind mit dem GCC-Attribut ‚access‘ annotiert, das bei der Kompilierung in GCC 10 qualitativ hochwertigere Warnungen bei der Erkennung möglicher Pufferüberläufe und anderer Arten von Überlaufgrenzen erzeugt.
- Für Linux-Systeme wurden die Funktionen pthread_attr_setsigmask_np und
pthread_attr_getsigmask_np implementiert, die es der Anwendung ermöglichen, eine Signalmask für Threads anzugeben, die mit pthread_create erstellt wurden. - Die Kodierungsdaten, die Informationen über Zeichentypen und die Transliterations Tabellen wurden aktualisiert, um die Spezifikation Unicode 13.0.0 zu unterstützen;
- Eine neue Header-Datei hinzugefügt, die die Variable __libc_single_threaded definiert, die in Anwendungen für einsträngige Optimierungen verwendet werden kann.
- Die Funktionen sigabbrev_np und sigdescr_np wurden hinzugefügt, die einen verkürzten Namen und eine Beschreibung eines Signals zurückgeben (z. B. „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 (z. B. „EINVAL“ und „Ungültiges Argument“ für EINVAL).
- Für die Plattform ARM64 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, bei denen keine Übergänge während der Zweigbildung ausgeführt werden sollten. Das Blockieren von Übergängen auf beliebige Codeabschnitte wurde implementiert, um die Erstellung von Gadgets in Exploits zu verhindern, die auf Techniken des rückwärtsorientierten Programmierens (ROP - Return-Oriented Programming) zurückgreifen, bei denen der Angreifer nicht versucht, eigenen Code im Speicher abzulegen, sondern bereits vorhandene Teile von Maschinenanweisungen verwendet, die mit einer Rückgabebefehlsanweisung enden, aus denen eine Aufrufkette aufgebaut wird, um die gewünschte Funktionalität zu erhalten.
- Eine umfassende Bereinigung veralteter Funktionen wurde durchgeführt, darunter die Optionen „—enable-obsolete-rpc“ und „—enable-obsolete-nsl“, und die Header-Datei . Folgende Funktionen wurden als veraltet erklärt: sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore und sigset, sowie die Arrays sys_siglist, _sys_siglist und sys_sigabbrev, die Symbole sys_errlist, _sys_errlist, sys_nerr und _sys_nerr, und das NSS-Modul hesiod.
- ldconfig wurde standardmäßig auf das neue Format ld.so.cache umgestellt, das in glibc bereits seit fast 20 Jahren unterstützt wird.
- Behobene Sicherheitsanfälligkeiten:
- CVE-2016-10228 — eine Endlosschleife in der Utility iconv, die auftritt, wenn sie mit der Option „-c“ für die Verarbeitung ungültiger mehrbyte-Kodierungsdaten aufgerufen wird.
- CVE-2020-10029 — Stackbeschädigung beim Aufruf trigonometrischer Funktionen mit einem pseudo-null-Wert als Argument.
- CVE-2020-1752 — Zugriff auf freigegebenen Speicher (use-after-free) in der Funktion glob beim Entpacken von Verweisen auf das Home-Verzeichnis („~user“) in Pfaden.
- CVE-2020-6096 — falsche Verarbeitung auf der ARMv7-Plattform von negativen Werten des Parameters in memcpy() und memmove(), der die Größe des zu kopierenden Bereichs definiert. die Ausführung von Code bei der Verarbeitung von in memcpy() und memmove() auf bestimmte Weise formatierten Daten. Es ist bemerkenswert, dass das Problem nicht behoben blieb.
Quelle: opennet.ru
