Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds die Kernel-Version . Zu den auffälligsten Änderungen gehören: der KCSAN-Race-Condition-Detektor, ein universeller Mechanismus zur Zustellbenachrichtigung im Benutzerspeicher, Unterstützung für Hardware zur Inline-Verschlüsselung, erweiterte Schutzmechanismen für ARM64, Unterstützung des russischen Prozessors Baikal-T1, die Möglichkeit zur separaten Einbindung von procfs-Instanzen und die Implementierung von Schutzmechanismen wie Shadow Call Stack und BTI für ARM64.
Das Kernel 5.8 hat die meisten Änderungen aller bisher existierenden Kernel des Projekts. Diese Änderungen sind nicht auf ein einzelnes Subsystem beschränkt, sondern betreffen verschiedene Teile des Kernels und sind hauptsächlich auf interne Überarbeitungen und Bereinigungen zurückzuführen. Die meisten Änderungen betreffen die Treiber. In die neue Version wurden 17606 Korrekturen von 2081 Entwicklern übernommen, die etwa 20 % aller Dateien im Repository des Kernels betreffen. Die Größe des Patches beträgt 65 MB (Änderungen betreffen 16180 Dateien, hinzugefügt wurden 1043240 Codezeilen, 489854 Zeilen wurden gelöscht). Zum Vergleich: In der Version 5.7 wurden 15033 Korrekturen vorgenommen, und die Größe des Patches betrug 39 MB. Etwa 37 % aller Änderungen in 5.8 beziehen sich auf Gerätetreiber, etwa 16 % ändern den architekturspezifischen Code, 11 % betreffen den Netzwerkstack, 3 % die Dateisysteme und 4 % die internen Subsysteme des Kernels.
:
- Virtualisierung und Sicherheit
- Es wurde eine Sperre für das Laden von Kernelmodulen implementiert, die Abschnitte mit Code enthalten, in denen gleichzeitig Ausführungs- und Schreibbits gesetzt sind. Diese Änderung wurde im Rahmen eines größeren Projekts zur Beseitigung der Verwendung von Speicherseiten, die sowohl Ausführung als auch Schreibzugriff zulassen, umgesetzt.
- Es ist nun möglich, separate Instanzen von procfs zu erstellen, die die Verwendung mehrerer procfs-Mountpunkte mit unterschiedlichen Optionen ermöglichen, die jedoch den gleichen Prozess-ID-Namensraum (pid namespace) widerspiegeln. Früher spiegelten alle procfs-Mountpunkte lediglich eine interne Darstellung wider, und jede Änderung der Mountparameter wirkte sich auf alle anderen damit verbundenen Mountpunkte aus. Bereiche, in denen das Mounten mit unterschiedlichen Optionen benötigt werden könnte, umfassen die Implementierung einer leichten Isolation für eingebettete Systeme, die es ermöglichen, bestimmte Arten von Prozessen und Informationsknoten in procfs zu verbergen.
- Für die ARM64-Plattform wurde die Unterstützung für den Mechanismus
, der vom Clang-Compiler bereitgestellt wird, zum Schutz vor der Überschreibung der Rückgabeadresse aus einer Funktion im Falle eines Bufferüberlaufs im Stack, implementiert. Der Schutz 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 wieder abzurufen. - Für die ARM64-Plattform wurde die Unterstützung für die Anweisungen (Branch Target Indicator) hinzugefügt, um die Ausführung von Befehlssätzen zu schützen, für die keine Sprünge bei Verzweigungen zulässig sind. Das Blockieren von Sprüngen zu beliebigen Codestellen wurde implementiert, um der Erstellung von Gadgets in Exploits, die Techniken des Return-Oriented Programming (ROP) verwenden, entgegenzuwirken, bei denen der Angreifer nicht versucht, eigenen Code im Speicher zu platzieren, sondern sich bereits vorhandene Stücke von Maschinenanweisungen, die mit einer Rückkehranweisung enden, bedient, um eine Kette von Aufrufen zu bilden, um die gewünschte Funktionalität zu erhalten.
- Die Unterstützung für Hardware zur Inline-Verschlüsselung von Blockgeräten wurde hinzugefügt (). Inline-Verschlüsselungsgeräte sind normalerweise im Speichergerät integriert, befinden sich aber logisch zwischen dem Systemspeicher und der Festplatte und führen eine transparente Verschlüsselung und Entschlüsselung von Ein- und Ausgabe basierend auf den vom Kernel festgelegten Schlüsseln und dem Verschlüsselungsalgorithmus durch.
- Ein Parameter für die Kernel-Befehlszeile „initrdmem“ wurde hinzugefügt, der die physische Adresse für die Platzierung von initrd im Speicher beim Laden des initialen Boot-Images in den RAM angibt.
- Neue Fähigkeiten hinzugefügt: CAP_PERFMON für den Zugriff auf das Perf-Subsystem und zur Durchführung der Leistungsüberwachung. , die die Ausführung bestimmter BPF-Operationen (z. B. Laden von BPF-Programmen) erlauben, die zuvor Berechtigungen CAP_SYS_ADMIN erforderten (nun wurden die Berechtigungen CAP_SYS_ADMIN in die Kombination CAP_BPF, CAP_PERFMON und CAP_NET_ADMIN aufgeteilt).
- Neues virtio-mem-Gerät, das Hot-Plugging und Hot-Unplugging von Speicher für Gastbetriebssysteme ermöglicht.
- Die Rücknahme von Mapping-Operationen in /dev/mem wird realisiert, wenn der Gerätetreiber überlappende Speicherbereiche verwendet.
- Es wurde Schutz vor der Sicherheitsanfälligkeit , das die Wiederherstellung der Ergebnisse der Ausführung bestimmter Anweisungen, die auf einem anderen CPU-Kern ausgeführt werden, ermöglicht.
- Speicher und Systemdienste
- In das Dokument, das die Regeln für die Codierung definiert, werden Empfehlungen zur Verwendung inklusiver Terminologie aufgenommen. Entwicklern wird empfohlen, die Begriffe ‚master/slave‘ und ‚blacklist/whitelist‘ sowie das Wort ‚slave‘ zu vermeiden. Diese Empfehlungen gelten nur für die neue Verwendung dieser Begriffe. Bereits vorhandene Erwähnungen der genannten Begriffe im Kernel bleiben unberührt. Im neuen Code ist die Verwendung der genannten Begriffe erlaubt, wenn dies zur Aufrechterhaltung der Benutzer-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.
- Inklusive ist das Debugging-Tool (Kernel Concurrency Sanitizer), das zum dynamischen Erkennen von im Kernel dient. Die Verwendung von KCSAN wird bei der Compilation in GCC und Clang unterstützt und erfordert spezielle Modifikationen in der Compilierungsphase, um den Speicherzugriff zu überwachen (es werden Haltepunkte verwendet, die bei Lese- oder Änderungszugriff auf den Speicher ausgelöst werden). Bei der Entwicklung von KCSAN lag der Schwerpunkt auf der Verhinderung von Fehlalarmen, Skalierbarkeit und Benutzerfreundlichkeit.
- Hinzugefügt Die Benachrichtigungszustellung aus dem Kernel in den Benutzerraum. Der Mechanismus basiert auf dem Standard-Pipe-Treiber und ermöglicht eine effektive Verteilung von Benachrichtigungen vom Kernel über die im Benutzerraum geöffneten Kanäle. Die Empfangspunkte für Benachrichtigungen sind Pipes, die in einem speziellen Modus geöffnet sind und es ermöglichen, eingehende Nachrichten vom Kernel im Ringpuffer zu sammeln. Das Lesen erfolgt mit der üblichen Funktion read(). Der Kanalinhaber bestimmt, welche Quellen im Kernel überwacht werden müssen, und kann einen Filter festlegen, um Nachrichten und Ereignisse eines bestimmten Typs zu ignorieren. Derzeit werden nur Schlüsseloperationen unterstützt, wie das Hinzufügen/Entfernen von Schlüsseln und das Ändern ihrer Attribute. Diese Ereignisse sollen in GNOME verwendet werden.
- Die Entwicklung der Funktionalität 'pidfd' wurde fortgesetzt, die hilft, Situationen mit der Wiederverwendung von PID zu bearbeiten (pidfd ist mit einem bestimmten Prozess verknüpft und ändert sich nicht, während der PID an einen anderen Prozess gebunden werden kann, nachdem der aktuelle Prozess, der mit diesem PID assoziiert ist, beendet wurde). In der neuen Version wurde die Unterstützung zur Verwendung von pidfd zur Anbindung von Prozessen an Namensräume hinzugefügt (es ist erlaubt, pidfd beim Ausführen des Systemaufrufs setns anzugeben). Die Verwendung von pidfd ermöglicht es, mit einem Aufruf die Anbindung eines Prozesses an mehrere Namensräume zu steuern und reduziert erheblich die Anzahl der erforderlichen Systemaufrufe, wobei die Anbindung im atomaren Modus realisiert wird (falls bei der Anbindung an einen der Namensräume 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 sie im Kernel implementieren kann). - In Cgroup die Einstellung memory.swap.high, die verwendet werden kann, um Aufgaben zu verlangsamen, die zu viel Platz im Swap-Bereich einnehmen.
- In die Schnittstelle für asynchrone Eingabe/Ausgabe Die Unterstützung für den Systemaufruf tee() wurde hinzugefügt.
- Ein Mechanismus ", der dazu dient, den Inhalt von Kernel-Strukturen in den Benutzerraum auszugeben.
- die Möglichkeit, einen Ringpuffer für den Datenaustausch zwischen BPF-Programmen zu verwenden.
- Im Mechanismus , der für die Organisation der parallelen Ausführung von Aufgaben im Kernel vorgesehen ist, wurde die Unterstützung für Multithreading-Aufgaben mit Lastenbalancierung hinzugefügt.
- In den pstore-Mechanismus, der es ermöglicht, Debugging-Informationen über die Ursachen eines Absturzes im Speicher zu speichern, die zwischen Neustarts nicht verloren gehen, Backend zum Speichern von Informationen auf Blockgeräten.
- Aus dem PREEMPT_RT-Kernelzweig Implementierung lokaler Sperren.
- Neue API zur Pufferzuweisung (AF_XDP), die darauf abzielt, das Schreiben von Netzwerktreibern mit Unterstützung für XDP (eXpress Data Path) zu vereinfachen.
- Für die RISC-V-Architektur wurde die Unterstützung für das Debugging von Kernelkomponenten mithilfe von KGDB implementiert.
- Vor der Veröffentlichung von 4.8 wurden die Anforderungen an die GCC-Version, die zum Bauen des Kernels verwendet werden kann, erhöht. In einer der nächsten Veröffentlichungen ist geplant, die Mindestanforderung auf GCC 4.9 zu erhöhen.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Device Mapper ein neuer Handler dm-ebs (emulate block size), der verwendet werden kann, um die Größe des logischen Blocks (z. B. zur Emulation von 512-Byte-Sektoren auf Festplatten mit einer Sektorgröße von 4K) zu emulieren.
- Im F2FS-Dateisystem gibt es Unterstützung für Kompression mit dem LZO-RLE-Algorithmus.
- In dm-crypt Unterstützung für verschlüsselte Schlüssel.
- In Btrfs wurde die Verarbeitung von Leseoperationen im direkten E/A-Modus verbessert. Beim Mounten Überprüfung von entfernten Unterverzeichnissen und Verzeichnissen ohne Eltern.
- In CIFS wurde der Parameter „nodelete“ hinzugefügt, der die regulären 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 FS ohne Seitencache unter Verwendung der Blockgerätedebugging) in Bezug auf bestimmte Dateien und Verzeichnisse aktiviert.
- Im Systemaufruf wurde ein Flag hinzugefügt , bei dessen Angabe die Informationen unter Verwendung des DAX-Mechanismus abgerufen werden.
- In EXFAT wurde die Unterstützung zur Verifizierung des Bootbereichs implementiert.
- In FAT Vorab-Laden von FS-Elementen. Tests mit einem langsamen 2TB USB-Laufwerk haben bewiesen, dass die Testdauer von 383 auf 51 Sekunden verkürzt wurde.
- Netzwerksubsystem
- Im Code zur Steuerung der Netzwerkbrücken Protokollunterstützung (Media Redundancy Protocol), das Redundanz für mehrere Ethernet-Switches gewährleistet.
- In das Traffic-Management-System (Tc) Neue Funktion "gate", die es ermöglicht, Zeitintervalle für die Verarbeitung und das Verwerfen bestimmter Pakete festzulegen.
- Im Kern und im Tool ethtool wurde die Unterstützung für Tests von angeschlossenen Netzwerkkabeln 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 Multi-Protocol Label Switching hinzugefügt (MPLS wurde zuvor bereits für IPv4 unterstützt).
- Die Unterstützung für die Übertragung von IKE-Paketen (Internet Key Exchange) und IPSec über TCP wurde hinzugefügt () um mögliche Blockaden von UDP zu umgehen.
- Netzwerk-Blockgerät rnbd, das den Remote-Zugriff auf ein Blockgerät mittels RDMA-Transport (InfiniBand, RoCE, iWARP) und dem RTRS-Protokoll ermöglicht.
- Im TCP-Stack wurde die Unterstützung für die Kompression von Bereichen in selektiven Bestätigungsantworten (Selective Acknowledgment, SACK) hinzugefügt.
- Für IPv6 wurde die Unterstützung für TCP-LD (, Long Connectivity Disruptions) hinzugefügt.
- Ausrüstung
- Im DRM-Treiber i915 für Intel-Grafikkarten wurde standardmäßig die Unterstützung für Intel Tiger Lake (GEN12)-Chips aktiviert, für die auch die Möglichkeit zur Nutzung des Systems SAGV (System Agent Geyserville) zur dynamischen Anpassung von Frequenz und Spannung je nach Anforderungen an den Energieverbrauch oder die Leistung bereitgestellt.
- Im amdgpu-Treiber wurde die Unterstützung für das Pixel-Format FP16 hinzugefügt, und es wurde die Möglichkeit zur Arbeit mit verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) umgesetzt.
- Die Unterstützung für Stromverbrauchssensoren der AMD Zen- und Zen2-Prozessoren sowie für Temperaturfühler der AMD Ryzen 4000 Renoir wurde hinzugefügt. Für AMD Zen und Zen2 wurde die Unterstützung für den Abruf von Informationen zum Energieverbrauch über die Schnittstelle (Running Average Power Limit) bereitgestellt.
- Im Nouveau-Treiber wurde die Unterstützung für NVIDIA-Formatmodifikatoren hinzugefügt. Für gv100 wurde die Möglichkeit zur Nutzung von interlaced Scans realisiert. Die Definition von vGPU wurde hinzugefügt.
- Im MSM-Treiber (Qualcomm) wurde die Unterstützung für die GPUs Adreno A405, A640 und A650 hinzugefügt.
- Interner Rahmen für das Ressourcenmanagement von DRM (Direct Rendering Manager).
- Die Unterstützung für die Smartphones Xiaomi Redmi Note 7 und Samsung Galaxy S2 sowie für die Laptops Elm/Hana Chromebook wurde hinzugefügt.
- Treiber für LCD-Panels wurden hinzugefügt: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Unterstützung für ARM-Plattformen und die Plattformen Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips 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 des MIPS-Prozessors Loongson-2K (abgekürzt Loongson64) hinzugefügt. Für die CPU Loongson 3 wurde Unterstützung für Virtualisierung unter Verwendung des Hypervisors KVM hinzugefügt.
-
Unterstützung des russischen Prozessors Baikal-T1 und des darauf basierenden Systems auf einem Chip . Der Baikal-T1 Prozessor enthält zwei superskalare Kerne P5600 MIPS 32 r5, die mit 1.2 GHz laufen. Der Chip verfügt über L2-Cache (1 MB), einen DDR3-1600 ECC Speichercontroller, 1 Port 10Gb Ethernet, 2 Ports 1Gb Ethernet, PCIe Gen.3 x4 Controller, 2 SATA 3.0 Ports, USB 2.0, GPIO, UART, SPI, I2C. Der Prozessor bietet Hardwareunterstützung für Virtualisierung, SIMD-Anweisungen und einen integrierten Hardwarebeschleuniger für kryptografische Operationen, der den GOST 28147-89 unterstützt. Der Chip wurde unter Verwendung eines lizenzierten Prozessorkerns MIPS32 P5600 Warrior von Imagination Technologies entwickelt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation
Variante — , bereinigt von Elementen der Firmware und Treibern, die nichtfreie Komponenten oder Codeabschnitte enthalten, deren Anwendungsbereich vom Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in 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 Lautsprecherverstärker, Microsemi ZL38060 Connected Home Audio Processor und I2C EEPROM Slave deaktiviert. Der Code zur Bereinigung von Blobs in Treibern und Subsystemen Adreno GPU, HabanaLabs Goya, x86 Touchscreen, vt6656 und btbcm wurde aktualisiert.
Quelle: opennet.ru
