Linux 5.8-Kernel-Release

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.8. Zu den bemerkenswertesten Änderungen gehören: ein KCSAN-Race-Condition-Detektor, ein universeller Mechanismus zur Übermittlung von Benachrichtigungen an den Benutzerbereich, Hardware-Unterstützung für Inline-Verschlüsselung, verbesserte Sicherheitsmechanismen für ARM64, Unterstützung für den russischen Baikal-T1-Prozessor, die Möglichkeit, procfs-Instanzen separat zu mounten , Implementierung von Shadow-Sicherheitsmechanismen für ARM64 Call Stack und BTI.

Kernel 5.8 wurde hinsichtlich der Anzahl der Änderungen der größte aller Kernel während der gesamten Existenz des Projekts. Darüber hinaus beziehen sich die Änderungen nicht auf ein einzelnes Subsystem, sondern betreffen verschiedene Teile des Kernels und sind hauptsächlich mit internen Überarbeitungen und Bereinigungen verbunden. Die größten Veränderungen sind bei den Treibern zu beobachten. Die neue Version enthielt 17606 Korrekturen von 2081 Entwicklern, die etwa 20 % aller Dateien im Kernel-Code-Repository betrafen. Die Patchgröße beträgt 65 MB (die Änderungen betrafen 16180 Dateien, 1043240 Codezeilen wurden hinzugefügt, 489854 Zeilen wurden gelöscht). Im Vergleich dazu hatte der 5.7-Zweig 15033 Fixes und eine Patchgröße von 39 MB. Ungefähr 37 % aller in 5.8 eingeführten Änderungen beziehen sich auf Gerätetreiber, ungefähr 16 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 11 % beziehen sich auf den Netzwerkstapel, 3 % beziehen sich auf Dateisysteme und 4 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Haupt- Innovationen:

  • Virtualisierung und Sicherheit
    • Das Laden von Kernelmodulen, die Abschnitte mit Code haben, in denen gleichzeitig die Bits gesetzt sind, die die Ausführung und das Schreiben ermöglichen, ist vorgesehen. Die Änderung wurde im Rahmen eines größeren Projekts implementiert, um den Kernel von der Verwendung von Speicherseiten zu befreien, die eine gleichzeitige Ausführung und Schreiben ermöglichen.
    • Es ist jetzt möglich, separate procfs-Instanzen zu erstellen, was die Verwendung mehrerer procfs-Mount-Punkte ermöglicht, die mit unterschiedlichen Optionen gemountet werden, aber denselben Prozess-ID-Namespace (PID-Namespace) widerspiegeln. Bisher spiegelten alle procfs-Mount-Punkte nur eine interne Darstellung wider, und jede Änderung der Mount-Parameter wirkte sich auf alle anderen Mount-Punkte aus, die demselben Prozess-ID-Namespace zugeordnet waren. Zu den Bereichen, in denen die Bereitstellung verschiedener Optionen erforderlich sein kann, gehört die Implementierung einer leichtgewichtigen Isolierung für eingebettete Systeme mit der Möglichkeit, bestimmte Arten von Prozessen und Informationsknoten in ProCFs zu verbergen.
    • Die Unterstützung des Mechanismus wurde für die ARM64-Plattform implementiert
      Schattenruf-Stapel, wird vom Clang-Compiler bereitgestellt, um das Überschreiben der Rückgabeadresse einer Funktion im Falle eines Stapelpufferüberlaufs zu verhindern. Der Kern des Schutzes besteht darin, die Rücksprungadresse in einem separaten „Schattenstapel“ zu speichern, nachdem die Steuerung an eine Funktion übergeben wurde, und diese Adresse vor dem Verlassen der Funktion abzurufen.

    • Für die ARM64-Plattform wurde Befehlsunterstützung hinzugefügt ARMv8.5-BTI (Branch Target Indicator) zum Schutz der Ausführung von Befehlssätzen, zu denen nicht verzweigt werden soll. Das Blockieren von Übergängen zu beliebigen Codeabschnitten wird implementiert, um die Erstellung von Gadgets in Exploits zu verhindern, die Return-Oriented-Programming-Techniken (ROP – Return-Oriented Programming) verwenden; der Angreifer versucht nicht, seinen Code im Speicher zu platzieren, sondern operiert mit bereits vorhandenen Teilen von Maschinenbefehlen, die mit einem Return-Control-Befehl enden, aus dem eine Aufrufkette aufgebaut wird, um die gewünschte Funktionalität zu erhalten).
    • Hardware-Unterstützung für die Inline-Verschlüsselung von Blockgeräten hinzugefügt (Inline-Verschlüsselung). Inlinep-Verschlüsselungsgeräte sind normalerweise in das Laufwerk integriert, befinden sich jedoch logisch zwischen Systemspeicher und Festplatte und verschlüsseln und entschlüsseln I/O transparent auf der Grundlage von Kernel-spezifizierten Schlüsseln und einem Verschlüsselungsalgorithmus.
    • Die Kernel-Befehlszeilenoption „initrdmem“ wurde hinzugefügt, damit Sie die physische Speicheradresse der initrd angeben können, wenn Sie das anfängliche Startbild im RAM platzieren.
    • Neue Funktion hinzugefügt: CAP_PERFMON, um auf das Perf-Subsystem zuzugreifen und eine Leistungsüberwachung durchzuführen. CAP_BPF, was bestimmte BPF-Vorgänge ermöglicht (z. B. das Laden von BPF-Programmen), für die zuvor CAP_SYS_ADMIN-Rechte erforderlich waren (CAP_SYS_ADMIN-Rechte sind jetzt in eine Kombination aus CAP_BPF, CAP_PERFMON und CAP_NET_ADMIN aufgeteilt).
    • Verfasst am ein neues Virtio-Mem-Gerät, mit dem Sie Speicher im laufenden Betrieb in Gastsysteme einbinden und einbinden können.
    • Rückruf von Zuordnungsvorgängen in /dev/mem implementiert, wenn der Gerätetreiber überlappende Speicherbereiche verwendet.
    • Schutz vor Sicherheitslücken hinzugefügt CROSSTalk/SRBDS, mit dem Sie die Ergebnisse bestimmter Anweisungen wiederherstellen können, die auf einem anderen CPU-Kern ausgeführt wurden.
  • Speicher- und Systemdienste
    • In dem Dokument, das die Regeln für die Formatierung des Codes definiert, akzeptiert Empfehlungen für die Verwendung inklusiver Terminologie. Entwicklern wird nicht empfohlen, die Kombinationen „Master/Slave“ und „Blacklist/Whitelist“ sowie das Wort „Slave“ separat zu verwenden. Die Empfehlungen betreffen lediglich neue Verwendungen dieser Begriffe. Bereits im Kern vorhandene Erwähnungen der genannten Wörter bleiben davon unberührt. In neuem Code ist die Verwendung der gekennzeichneten Begriffe zulässig, wenn dies zur Unterstützung der im Benutzerbereich bereitgestellten API und ABI erforderlich ist, sowie bei der Aktualisierung des Codes zur Unterstützung vorhandener Hardware oder Protokolle, deren Spezifikationen die Verwendung bestimmter Begriffe erfordern.
    • Debugging-Tool enthalten KCSAN (Kernel Concurrency Sanitizer), entwickelt für die dynamische Erkennung Rennbedingungen im Inneren des Kerns. Die Verwendung von KCSAN wird beim Erstellen in GCC und Clang unterstützt und erfordert spezielle Änderungen zur Kompilierungszeit, um den Speicherzugriff zu verfolgen (es werden Haltepunkte verwendet, die ausgelöst werden, wenn Speicher gelesen oder geändert wird). Der Schwerpunkt der Entwicklung von KCSAN lag auf der Verhinderung falsch positiver Ergebnisse, der Skalierbarkeit und der Benutzerfreundlichkeit.
    • Добавлен universeller Mechanismus Übermittlung von Benachrichtigungen vom Kernel an den Benutzerbereich. Der Mechanismus basiert auf dem Standard-Pipe-Treiber und ermöglicht die effiziente Verteilung von Benachrichtigungen vom Kernel über im Benutzerbereich geöffnete Kanäle. Benachrichtigungsempfangspunkte sind Pipes, die in einem speziellen Modus geöffnet werden und es ermöglichen, vom Kernel empfangene Nachrichten in einem Ringpuffer zu akkumulieren. Das Lesen erfolgt mit der üblichen read()-Funktion. Der Kanalbesitzer bestimmt, welche Quellen im Kernel überwacht werden müssen, und kann einen Filter definieren, um bestimmte Arten von Nachrichten und Ereignissen zu ignorieren. Von den Ereignissen werden derzeit nur Operationen mit Schlüsseln unterstützt, z. B. das Hinzufügen/Entfernen von Schlüsseln und das Ändern ihrer Attribute. Diese Ereignisse sollen in GNOME verwendet werden.
    • Weiterentwicklung der „pidfd“-Funktionalität, um den Umgang mit PID-Wiederverwendungssituationen zu erleichtern (pidfd ist einem bestimmten Prozess zugeordnet und ändert sich nicht, während eine PID einem anderen Prozess zugeordnet werden kann, nachdem der aktuelle Prozess, der dieser PID zugeordnet ist, beendet wird). Die neue Version bietet Unterstützung für die Verwendung von pidfd zum Anhängen eines Prozesses an Namespaces (wodurch pidfd beim Ausführen des setns-Systemaufrufs angegeben werden kann). Durch die Verwendung von pidfd können Sie die Anbindung eines Prozesses an mehrere Arten von Namespaces mit einem Aufruf steuern, wodurch die Anzahl der erforderlichen Systemaufrufe erheblich reduziert und die Anbindung im Atommodus implementiert wird (wenn die Anbindung an einen der Namespaces fehlschlägt, werden die anderen nicht verbunden). .
    • Ein neuer Systemaufruf faccessat2() hinzugefügt, der sich von unterscheidet
      faccessat() ein zusätzliches Argument mit Flags, die den POSIX-Empfehlungen entsprechen (zuvor wurden diese Flags in der C-Bibliothek emuliert, und das neue faccessat2 ermöglicht ihre Implementierung im Kernel).

    • In Cgroup hinzugefügt eine Einstellung für „memory.swap.high“, mit der Aufgaben verlangsamt werden können, die zu viel Swap-Speicher beanspruchen.
    • Zur asynchronen I/O-Schnittstelle io_uring Unterstützung für den Systemaufruf tee() hinzugefügt.
    • Mechanismus hinzugefügt "BPF-Iterator, entwickelt, um den Inhalt von Kernelstrukturen im Benutzerbereich auszugeben.
    • Zur Verfügung gestellt von die Möglichkeit, einen Ringpuffer für den Datenaustausch zwischen BPF-Programmen zu verwenden.
    • In den Mechanismus Padata, das entwickelt wurde, um die parallele Ausführung von Aufgaben im Kernel zu organisieren, fügte Unterstützung für Multithread-Aufgaben mit Lastausgleich hinzu.
    • Im pstore-Mechanismus, der es Ihnen ermöglicht, Debugging-Informationen über die Ursache des Absturzes in Speicherbereichen zu speichern, die zwischen Neustarts nicht verloren gehen, hinzugefügt Backend zum Speichern von Informationen zum Blockieren von Geräten.
    • Aus dem PREEMPT_RT-Kernelzweig gerührt Implementierung lokaler Sperren.
    • Добавлен Neue Pufferzuweisungs-API (AF_XDP), die das Schreiben von Netzwerktreibern mit XDP-Unterstützung (eXpress Data Path) vereinfachen soll.
    • Für die RISC-V-Architektur wurde Unterstützung für das Debuggen von Kernelkomponenten mithilfe von KGDB implementiert.
    • Vor Version 4.8 wurden die Anforderungen an die Version von GCC, die zum Erstellen des Kernels verwendet werden kann, erhöht. In einem der nächsten Releases ist geplant, die Messlatte auf GCC 4.9 anzuheben.
  • Festplattensubsystem, E/A und Dateisysteme
    • Im Device Mapper hinzugefügt Neuer dm-ebs-Handler (Blockgröße emulieren), der zum Emulieren einer kleineren logischen Blockgröße verwendet werden kann (z. B. zum Emulieren von 512-Byte-Sektoren auf Festplatten mit 4K-Sektorgröße).
    • Das F2FS-Dateisystem unterstützt jetzt die Komprimierung mit dem LZO-RLE-Algorithmus.
    • In dm-crypt hinzugefügt Unterstützung für verschlüsselte Schlüssel.
    • Btrfs hat die Handhabung von Lesevorgängen im direkten I/O-Modus verbessert. Bei der Montage beschleunigt Überprüfen gelöschter Unterabschnitte und Verzeichnisse, die kein übergeordnetes Element mehr haben.
    • CIFS wurde ein „Nodelete“-Parameter hinzugefügt, der normale Berechtigungsprüfungen auf dem Server ermöglicht, dem Client jedoch das Löschen von Dateien oder Verzeichnissen verbietet.
    • Ext4 verfügt über eine verbesserte Fehlerbehandlung ENOSPC bei Verwendung von Multithreading. xattr hat Unterstützung für den in GNU Hurd verwendeten gnu.*-Namespace hinzugefügt.
    • Für Ext4 und XFS ist die Unterstützung von DAX-Operationen (direkter Zugriff auf das Dateisystem, Umgehen des Seitencaches ohne Verwendung der Blockgeräteebene) in Bezug auf einzelne Dateien und Verzeichnisse aktiviert.
    • Im Systemaufruf statx() Flagge hinzugefügt STATX_ATTR_DAX, das bei Angabe Informationen mithilfe der DAX-Engine abruft.
    • EXFAT hinzugefügt Unterstützung für die Überprüfung des Bootbereichs.
    • In Fett verbessert Proaktives Laden von FS-Elementen. Der Test eines langsamen 2-TB-USB-Laufwerks zeigte eine Verkürzung der Testabschlusszeit von 383 auf 51 Sekunden.
  • Netzwerk-Subsystem
    • Im Code zur Steuerung des Betriebs von Netzwerkbrücken hinzugefügt Protokollunterstützung MRP (Media Redundancy Protocol), das Fehlertoleranz durch Schleifen mehrerer Ethernet-Switches ermöglicht.
    • Zum Verkehrsleitsystem (Tc) hinzugefügt Neue „Gate“-Aktion, die es ermöglicht, Zeitintervalle für die Verarbeitung und das Verwerfen bestimmter Pakete zu definieren.
    • Dem Kernel und dem Dienstprogramm ethtool wurde Unterstützung für das Testen des angeschlossenen Netzwerkkabels und die Selbstdiagnose von Netzwerkgeräten hinzugefügt.
    • Dem IPv6-Stack wurde Unterstützung für den MPLS-Algorithmus (Multiprotocol Label Switching) hinzugefügt, um Pakete mithilfe von Multiprotocol Label Switching weiterzuleiten (MPLS wurde zuvor für IPv4 unterstützt).
    • Unterstützung für die Übertragung von IKE- (Internet Key Exchange) und IPSec-Paketen über TCP hinzugefügt (RFC 8229), um mögliche UDP-Blockierungen zu umgehen.
    • Verfasst am Netzwerkblockgerät rnbd, mit dem Sie den Fernzugriff auf ein Blockgerät mithilfe des RDMA-Transports (InfiniBand, RoCE, iWARP) und des RTRS-Protokolls organisieren können.
    • Im TCP-Stack hinzugefügt Unterstützung für Bereichskomprimierung in SACK-Antworten (Selective Acknowledgement).
    • Für IPv6 umgesetzt TCP-LD-Unterstützung (RFC 6069, lange Verbindungsunterbrechungen).
  • Ausrüstung
    • Der i915 DRM-Treiber für Intel-Grafikkarten unterstützt standardmäßig Intel Tiger Lake (GEN12)-Chips umgesetzt die Möglichkeit, das SAGV-System (System Agent Geyserville) zu verwenden, um Frequenz und Spannung je nach Stromverbrauch oder Leistungsanforderungen dynamisch anzupassen.
    • Der amdgpu-Treiber bietet Unterstützung für das FP16-Pixelformat und die Möglichkeit, mit verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) zu arbeiten.
    • Unterstützung für Leistungssensoren für AMD Zen- und Zen2-Prozessoren sowie Temperatursensoren für AMD Ryzen 4000 Renoir hinzugefügt. Für AMD Zen und Zen2 wird das Abrufen von Informationen zum Stromverbrauch über die Schnittstelle unterstützt RAPL (Laufende durchschnittliche Leistungsgrenze).
    • Unterstützung für das NVIDIA-Modifikatorformat zum Nouveau-Treiber hinzugefügt. Für gv100 wurde die Möglichkeit implementiert, Interlaced-Scanmodi zu verwenden. vGPU-Erkennung hinzugefügt.
    • Unterstützung für Adreno A405-, A640- und A650-GPUs zum MSM-Treiber (Qualcomm) hinzugefügt.
    • Добавлен internes Framework zur Verwaltung von DRM-Ressourcen (Direct Rendering Manager).
    • Unterstützung für Xiaomi Redmi Note 7- und Samsung Galaxy S2-Smartphones sowie Elm/Hana Chromebook-Laptops 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-Boards und Plattformen Renesas „RZ/G1H“, Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50, hinzugefügt.
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Unterstützung für den MIPS-Prozessor Loongson-2K (abgekürzt Loongson64) hinzugefügt. Für CPU Loongson 3 wurde Unterstützung für Virtualisierung mithilfe des KVM-Hypervisors hinzugefügt.
    • Hinzugefügt von
      Unterstützung für den russischen Baikal-T1-Prozessor und das darauf basierende System-on-Chip BE-T1000. Der Baikal-T1-Prozessor enthält zwei superskalare P5600 MIPS 32 r5-Kerne, die mit 1.2 GHz arbeiten. Der Chip enthält L2-Cache (1 MB), DDR3-1600 ECC-Speichercontroller, 1 10-Gbit-Ethernet-Port, 2 1-Gbit-Ethernet-Ports, 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 Hardware-Kryptografiebeschleuniger, der GOST 28147-89 unterstützt. Der Chip wird unter Verwendung einer von Imagination Technologies lizenzierten MIPS32 P5600 Warrior-Prozessorkerneinheit entwickelt.

Gleichzeitig die Latin American Free Software Foundation gebildet
вариант völlig kostenloser Kernel 5.8 - Linux-libre 5.8-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang vom Hersteller begrenzt ist. Die neue Version deaktiviert 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 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, und I2C EEPROM-Slave. Aktualisierter Blob-Reinigungscode in Adreno-GPU, HabanaLabs Goya, x86-Touchscreen, vt6656 und BTBCM-Treibern und -Subsystemen.

Source: opennet.ru

Kommentar hinzufügen