Nach zwei Monaten der Entwicklung stellte Linus Torvalds Release des Kernels . Zu den bemerkenswertesten Änderungen gehören: der KCSAN-Race-Condition-Detektor, ein universeller Benachrichtigungsmechanismus für den Benutzerspeicher, Unterstützung von Hardware für Inline-Verschlüsselung, erweiterte Schutzmechanismen für ARM64, Unterstützung des russischen Prozessors Baikal-T1, die Möglichkeit der separaten Montage von procfs-Instanzen sowie die Implementierung von Schutzmechanismen wie Shadow Call Stack und BTI für ARM64.
Der Kernel 5.8 weist die meisten Änderungen aller bisherigen Kernel-Versionen im Rahmen dieses Projekts auf. Die Änderungen betreffen nicht nur ein einzelnes Subsystem, sondern umfassen verschiedene Teile des Kernels und sind hauptsächlich auf interne Überarbeitungen und Bereinigungen zurückzuführen. Die meisten Änderungen sind in den Treibern zu beobachten. In die neue Version wurden 17.606 Korrekturen von 2.081 Entwicklern übernommen, die etwa 20 % aller Dateien im Repository des Kernels betroffen haben. Die Patch-Größe beträgt 65 MB (die Änderungen betrifft 16.180 Dateien, 1.043.240 Codezeilen wurden hinzugefügt und 489.854 Codezeilen entfernt). Zum Vergleich wurden in der Version 5.7 15.033 Korrekturen vorgenommen, und die Patch-Größe betrug 39 MB. Etwa 37 % aller in 5.8 vorgenommenen Änderungen beziehen sich auf Gerätetreiber, etwa 16 % der Änderungen stehen im Zusammenhang mit der Aktualisierung von architekturspezifischem Code, 11 % sind mit dem Netzwerk-Stack verbunden, 3 % mit den Dateisystemen und 4 % mit den internen Subsystemen des Kernels.
:
- Virtualisierung und Sicherheit
- Die Ausführung von Kernelmodulen, die gleichzeitig gesetzte Bits für Ausführung und Schreibzugriff enthalten, wird blockiert. Diese Änderung ist Teil eines größeren Projekts zur Eliminierung der Verwendung von Speicherseiten, die sowohl Ausführung als auch Schreibzugriff ermöglichen.
- Es besteht nun die Möglichkeit, separate Instanzen von procfs zu erstellen, die mehrere procfs-Mount-Punkte mit unterschiedlichen Optionen verwenden, jedoch einen gemeinsamen Prozess-ID-Namensraum (pid namespace) widerspiegeln. Zuvor spiegelten alle procfs-Mount-Punkte nur eine interne Darstellung wider, sodass Änderungen an den Mount-Parametern alle weiteren Mount-Punkte im gleichen Prozess-ID-Namensraum beeinflussten. Bereiche, in denen das Mounten mit unterschiedlichen Optionen gefragt ist, sind die Implementierung von leichtgewichtiger Isolation für eingebettete Systeme, bei der bestimmte Prozessarten und Informationsknoten in procfs verborgen werden können.
- Für die ARM64-Plattform wurde die Unterstützung für das Verfahren
, bereitgestellt vom Clang-Compiler, um einen Rückgabeadressüberschreibschutz aus einer Funktion bei einem Buffer-Overflow im Stack zu gewährleisten. Das Grundprinzip des Schutzes besteht darin, die Rückgabeadresse nach der Übergabe der Kontrolle an die Funktion in einem separaten „Schatten“-Stack zu speichern und diese Adresse vor dem Verlassen der Funktion abzurufen. - Für die ARM64-Plattform wurde die Unterstützung für die Instruktionen (Branch Target Indicator) hinzugefügt, um die Ausführung von Befehlssätzen zu schützen, bei denen keine Verzweigungen eintreten sollten. Die Blockierung von Sprüngen zu beliebigen Codeabschnitten wurde implementiert, um der Erstellung von Gadgets in Exploits entgegenzuwirken, die return-oriented programming Techniken (ROP – Return-Oriented Programming) nutzen, bei denen der Angreifer nicht versucht, eigenen Code im Speicher abzulegen, sondern mit bereits vorhandenen Maschineninstruktionsfragmenten operiert, die mit einer Rücksprunginstruktion enden, aus denen eine Kette von Aufrufen für die gewünschte Funktionalität konstruiert wird.
- Die Unterstützung für Hardware zum Inline-Verschlüsseln von Blockgeräten wurde hinzugefügt (). Inline-Verschlüsselungsgeräte sind in der Regel im Speicher integriert, agieren jedoch logisch zwischen dem Arbeitsspeicher und der Festplatte, um die Ein- und Ausgabe basierend auf vom Kernel angegebenen Schlüsseln und Verschlüsselungsalgorithmen transparent zu verschlüsseln und zu entschlüsseln.
- Es wurde der Kernel-Kommandozeilenparameter „initrdmem“ hinzugefügt, der es ermöglicht, die physische Adresse für die Platzierung von initrd im Speicher anzugeben, wenn das anfängliche Boot-Image im RAM abgelegt wird.
- Es wurden neue Berechtigungen hinzugefügt: CAP_PERFMON für den Zugriff auf das Perf-Subsystem und die Leistungsüberwachung. , die die Ausführung bestimmter Operationen mit BPF (z. B. das Laden von BPF-Programmen) ermöglicht, die zuvor die Berechtigung CAP_SYS_ADMIN benötigten (jetzt wurden die Berechtigungen CAP_SYS_ADMIN in eine Kombination aus CAP_BPF, CAP_PERFMON und CAP_NET_ADMIN aufgeteilt).
- , ein neues virtio-mem-Gerät, mit dem das Hot-Plugging und Entfernen von Speicher in Gast-Systemen ermöglicht wird.
- Die Rücknahme von Mapping-Operationen in /dev/mem wurde implementiert, wenn der Gerätetreiber überlappende Speicherbereiche verwendet.
- Es wurde ein Schutz vor der Schwachstelle , hinzugefügt, der es ermöglicht, die Ergebnisse der Ausführung bestimmter Anweisungen, die auf einem anderen CPU-Kern ausgeführt werden, wiederherzustellen.
- Speicher und Systemdienste
- In dem Dokument, das die Regeln für die Code-Gestaltung festlegt, werden Empfehlungen für die Verwendung von inklusiver Terminologie gegeben. Entwicklern wird geraten, die Begriffe 'master / slave' sowie 'blacklist / whitelist' zu vermeiden, ebenso wie das Wort 'slave' selbst. Diese Empfehlungen gelten nur für neue Verwendungen der genannten Begriffe. Bereits im Kern vorhandene Erwähnungen dieser Wörter bleiben unberührt. In neuem Code ist die Verwendung der genannten Begriffe erlaubt, wenn dies zur Aufrechterhaltung der in den Benutzerraum ausgegebenen API und ABI erforderlich ist, sowie bei der Aktualisierung des Codes zur Unterstützung vorhandener Hardware oder Protokolle, deren Spezifikationen die Verwendung bestimmter Begriffe vorschreiben.
- Enthalten ist das Debugging-Tool (Kernel Concurrency Sanitizer), das für die dynamische Erkennung von innerhalb des Kerns. Die Verwendung von KCSAN wird bei der Kompilierung mit GCC und Clang unterstützt und erfordert spezielle Modifikationen während des Kompilierungsprozesses, um den Zugriff auf den Speicher zu überwachen (es werden Haltepunkte gesetzt, die bei Lese- oder Schreiboperationen im Speicher aktiv werden). Der Hauptfokus bei der Entwicklung von KCSAN liegt auf der Vermeidung von Fehlalarmen, Skalierbarkeit und Benutzerfreundlichkeit.
- Hinzugefügt Benachrichtigungsübermittlung vom Kernel in den Benutzerraum. Der Mechanismus basiert auf dem Standard-Pipedreiber und ermöglicht eine effiziente Verteilung von Benachrichtigungen vom Kernel über in den Benutzerraum geöffnete Kanäle. Die Empfangspunkte für Benachrichtigungen sind Pipes, die im speziellen Modus geöffnet wurden und es ermöglichen, eintreffende Nachrichten vom Kernel im Ringpuffer zu speichern. Das Lesen erfolgt über die reguläre Funktion read(). Der Besitzer des Kanals bestimmt, welche Quellen im Kernel überwacht werden müssen, und kann einen Filter festlegen, um Nachrichten und Ereignisse bestimmter Typen zu ignorieren. Unterstützt werden bisher nur Schlüsseloperationen, wie das Hinzufügen/Entfernen von Schlüsseln und das Ändern ihrer Attribute. Diese Ereignisse sind in GNOME geplant.
- Die Entwicklung der Funktionalität ‘pidfd’ wurde fortgesetzt, die bei der Verarbeitung von Situationen mit der Wiederverwendung von PID hilft (pidfd ist an einen bestimmten Prozess gebunden und bleibt gleich, während der PID nach Abschluss des aktuellen Prozesses, der mit diesem PID verbunden ist, einem anderen Prozess zugewiesen werden kann). In der neuen Version wurde die Unterstützung für die Verwendung von pidfd zur Verbindung von Prozessen mit Namespaces hinzugefügt (die Angabe von pidfd ist bei der Ausführung des Systemaufrufs setns erlaubt). Die Anwendung von pidfd ermöglicht es, mit einem einzigen Aufruf die Verbindung eines Prozesses zu mehreren Typen von Namespaces zu verwalten, was die Anzahl der erforderlichen Systemaufrufe erheblich reduziert und die Verbindung im atomaren Modus realisiert (wenn bei der Verbindung zu einem der Namespaces ein Fehler auftritt, werden auch die anderen nicht verbunden).
- Ein neuer Systemaufruf faccessat2() wurde hinzugefügt, der sich von
durch ein zusätzliches Argument mit Flags unterscheidet, die den POSIX-Empfehlungen entsprechen (früher wurden diese Flags in der C-Bibliothek emuliert, während der neue faccessat2 es ermöglicht, sie im Kernel zu implementieren). - In Cgroup Die Konfiguration memory.swap.high, die verwendet werden kann, um Aufgaben, die zu viel Platz im Swap-Bereich beanspruchen, zu verlangsamen.
- In die Schnittstelle für asynchronen Input/Output Unterstützung für den Systemaufruf tee() hinzugefügt.
- Ein Mechanismus hinzugefügt:, um Inhalte von Kernelstrukturen in den Benutzerspeicher auszugeben.
- die Möglichkeit geschaffen, einen Ringpuffer für den Datenaustausch zwischen BPF-Programmen zu nutzen.
- Im Mechanismus , der für die Organisation der parallelen Ausführung von Aufgaben im Kernel vorgesehen ist, wurde die Unterstützung für Multithreading mit Lastenausgleich hinzugefügt.
- Im Mechanismus pstore, der es ermöglicht, Debugging-Informationen über die Ursachen von Abstürzen im Speicher zu speichern, die zwischen Neustarts nicht verloren gehen, Backend zum Speichern von Informationen auf Blockgeräten.
- Von der PREEMPT_RT-Kernel-Branch die Implementierung von lokalen Sperren übertragen.
- Neue API zur Pufferallokation (AF_XDP), die darauf abzielt, das Schreiben von Netzwerktreibern mit XDP-Unterstützung (eXpress Data Path) zu vereinfachen.
- Für die RISC-V-Architektur wurde die Unterstützung für das Debuggen von Kernelkomponenten mit KGDB implementiert.
- Vor der Version 4.8 wurden die Anforderungen an die GCC-Version, die zum Kompilieren des Kernels verwendet werden kann, erhöht. In einer der nächsten Versionen ist geplant, die Schwelle auf GCC 4.9 anzuheben.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Device Mapper gibt es einen neuen Handler dm-ebs (emulate block size), der verwendet werden kann, um kleinere logische Blockgrößen zu emulieren (zum Beispiel um 512-Byte-Sektoren auf 4K-Sektor-Festplatten zu emulieren).
- Im Dateisystem F2FS wurde die Unterstützung für Kompression mit dem LZO-RLE-Algorithmus hinzugefügt.
- In dm-crypt wurde die Unterstützung für verschlüsselte Schlüssel hinzugefügt.
- In Btrfs wurde die Verarbeitung von Lesevorgängen im Direct I/O-Modus verbessert. Bei der Einbindung wird die Überprüfung von entfernten Unterverzeichnissen und Verzeichnissen ohne Elternteil vorgenommen.
- In CIFS wurde die Option „nodelete“ hinzugefügt, die standardmäßige Berechtigungsprüfungen auf dem Server zulässt, aber dem Client das Löschen von Dateien oder Verzeichnissen verbietet.
- In Ext4 wurde die Fehlerbehandlung verbessert. bei der Verwendung von Multithreading. In xattr wurde die Unterstützung für den Namensraum gnu.* hinzugefügt, der in GNU Hurd verwendet wird.
- Für Ext4 und XFS wurde die Unterstützung für DAX-Operationen (Direkter Zugriff auf das Dateisystem ohne Seiten-Cache unter Verwendung von Blockgerät-Schichten) in Bezug auf einzelne Dateien und Verzeichnisse aktiviert.
- Im Systemaufruf Flag hinzugefügt , bei dessen Angabe Informationen über den DAX-Mechanismus abgerufen werden.
- In EXFAT Unterstützung der Verifizierung des Bootbereichs.
- In FAT Vorabladung von FS-Elementen. Tests mit einem langsamen 2TB-USB-Laufwerk zeigten eine Reduzierung der Testzeit von 383 auf 51 Sekunden.
- Netzwerksubsystem
- In den Netzwerkbrückensteuerungscode Unterstützung des Protokolls (Media Redundancy Protocol), das Redundanz durch die Vernetzung mehrerer Ethernet-Switches gewährleistet.
- Im Traffic-Management-System (Tc) eine neue Aktion „gate“, die es ermöglicht, Zeitintervalle für die Verarbeitung und das Verwerfen bestimmter Pakete zu definieren.
- In den Kernel und das Tool ethtool wurde Unterstützung für Testfunktionen des angeschlossenen Netzwerkkabels und die Selbstdiagnose von Netzwerkgeräten hinzugefügt.
- Im IPv6-Stack wurde die Unterstützung für den MPLS-Algorithmus (Multiprotocol Label Switching) zur Paketweiterleitung mit Label-Switching (zuvor wurde MPLS nur für IPv4 unterstützt) hinzugefügt.
- Unterstützung der Übertragung von IKE-Paketen (Internet Key Exchange) und IPSec über TCP) zum Umgehen möglicher UDP-Blockaden.
- Das Netzwerk-Blockgerät rnbd ermöglicht den Remote-Zugriff auf das Blockgerät über den RDMA-Transport (InfiniBand, RoCE, iWARP) und das RTRS-Protokoll.
- Im TCP-Stack Unterstützung der Bereichskompression in den Rückmeldungen der selektiven Bestätigung (Selective Acknowledgment, SACK).
- Für IPv6 Unterstützung von TCP-LD (, lange Verbindungsunterbrechungen).
- Ausrüstung
- Im DRM-Treiber i915 für Intel-Grafikkarten ist die Unterstützung für Intel Tiger Lake-Chips (GEN12) standardmäßig aktiviert. Für diese gibt es auch die Möglichkeit, das System SAGV (System Agent Geyserville) zur dynamischen Anpassung von Frequenz und Spannung je nach Energieverbrauch oder Leistungsanforderungen zu nutzen.
- Im amdgpu-Treiber wurde die Unterstützung des Pixel-Formats FP16 hinzugefügt und die Möglichkeit zur Verarbeitung verschlüsselter Puffer im Videospeicher (TMZ, Trusted Memory Zone) implementiert.
- Die Unterstützung von Energiesensoren für AMD Zen- und Zen2-Prozessoren sowie von Temperatursensoren für AMD Ryzen 4000 Renoir wurde hinzugefügt. Für AMD Zen und Zen2 wird die Unterstützung zur Abfrage von Informationen über den Energieverbrauch über die Schnittstelle (Running Average Power Limit) gewährleistet.
- Der Nouveau-Treiber unterstützt jetzt das NVIDIA-Modifikatormodell. Für gv100 wurde die Möglichkeit zur Nutzung von interlaced Scan-Modi implementiert. Die vGPU-Erkennung wurde hinzugefügt.
- Der MSM (Qualcomm)-Treiber unterstützt jetzt die GPUs Adreno A405, A640 und A650.
- Internes Framework zur Verwaltung von DRM-Ressourcen (Direct Rendering Manager).
- Unterstützung für die Smartphones Xiaomi Redmi Note 7 und Samsung Galaxy S2 sowie für die Laptops Elm/Hana Chromebook hinzugefügt.
- Treiber für LCD-Panels hinzugefügt: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Unterstützung für ARM-Plattformen und Renesas-Plattformen "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchip RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI. - Unterstützung für MIPS-Prozessor Loongson-2K (verkürzte Loongson64). Für den CPU Loongson 3 wurde die Virtualisierung mit dem KVM-Hypervisor hinzugefügt.
-
Unterstützung für den russischen Baikal-T1-Prozessor und darauf basierende SoCs. . Der Baikal-T1 Prozessor verfügt über zwei superskalare P5600 MIPS 32 r5 Kerne, die mit 1,2 GHz betrieben werden. Der Chip enthält einen L2-Cache (1 MB), einen DDR3-1600 ECC Speichercontroller, einen 10Gb Ethernet-Port, zwei 1Gb Ethernet-Ports, einen PCIe Gen.3 x4 Controller, zwei SATA 3.0 Ports, USB 2.0, GPIO, UART, SPI und I2C. Der Prozessor bietet hardwareseitige Unterstützung für Virtualisierung, SIMD-Anweisungen und einen integrierten Hardware-Beschleuniger für kryptografische Operationen, der den ГОСТ 28147-89 unterstützt. Der Chip wurde unter Verwendung des lizenzierten Prozessorkerns MIPS32 P5600 Warrior von Imagination Technologies entwickelt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation
Variante ist gut gelungen. — , die von Firmware-Elementen und Treibern bereinigt wurde, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Anwendung durch den Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern für Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor und I2C EEPROM Slave deaktiviert. Der Code zur Bereinigung von Blobs in Treibern und Subsystemen von Adreno GPU, HabanaLabs Goya, x86 Touchscreen, vt6656 und btbcm wurde aktualisiert.
Quelle: opennet.ru
