Release des Linux-Kernels 5.2

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor die Kernel-Version Linux 5.2. Zu den auffälligsten Änderungen gehören: der Ext4-Betriebsmodus ohne Berücksichtigung der Groß- und Kleinschreibung, separate Systemaufrufe zum Einhängen von Dateisystemen, Treiber für GPU Mali 4xx/6xx/7xx, die Möglichkeit zur Verarbeitung von Änderungen der sysctl-Werte in BPF-Programmen, das Device-Mapper-Modul dm-dust, Schutz vor MDS-Angriffen, Unterstützung für Sound Open Firmware für DSP, Leistungsoptimierung BFQ und die Weiterentwicklung des PSI (Pressure Stall Information)-Subsystems zur Nutzung in Android.

In die neue Version wurden 15100 Korrekturen von 1882 Entwicklern aufgenommen,
die Patchgröße beträgt 62 MB (Änderungen betreffen 30889 Dateien, 625094 Codezeilen wurden hinzugefügt, 531864 Zeilen wurden entfernt). Etwa 45 % der Änderungen in 5.2
hängen mit Gerätetreibern zusammen, ungefähr 21 % der Änderungen beziehen sich auf die Aktualisierung von architekturspezifischem Code, 12 %
sind mit dem Netzwerk-Stack verbunden, 3 % - mit Dateisystemen und 3 % mit internen
Subsystemen des Kernels. 12,4 % aller Änderungen wurden von Intel vorbereitet, 6,3 % von Red Hat, 5,4 % von Google, 4,0 % von AMD, 3,1 % von SUSE, 3 % von IBM, 2,7 % von Huawei, 2,7 % von Linaro, 2,2 % von ARM, 1,6 % von Oracle.
Für Ext4 wurde die

Haupt- Neuheiten:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Funktion hinzugefügt, die ohne Berücksichtigung der Groß- und Kleinschreibung bei Dateinamen arbeitet, die nur an bestimmten leeren Verzeichnissen über das neue Attribut „+F“ (EXT4_CASEFOLD_FL) aktiviert wird. Bei Aktivierung dieses Attributs für ein Verzeichnis werden alle Operationen mit Dateien und Unterverzeichnissen darin ohne Berücksichtigung der Groß- und Kleinschreibung durchgeführt, auch bei Such- und Öffnungsoperationen wird die Groß-/Kleinschreibung ignoriert (zum Beispiel werden Dateien Test.txt, test.txt und test.TXT in solchen Verzeichnissen als identisch betrachtet). Standardmäßig bleibt das Dateisystem groß- und kleinschreibungsabhängig, mit Ausnahme von Verzeichnissen mit dem Attribut „chattr +F“; unterstützt Die Funktionen zur Verarbeitung von UTF-8-Zeichen in Dateinamen wurden vereinheitlicht, die bei Vergleichs- und Normalisierungsoperationen angewendet werden;
    • In XFS wurde eine Infrastruktur zur Überwachung des Zustands des Dateisystems und ein neuer ioctl zur Anforderung des Status der Funktionsfähigkeit hinzugefügt. Eine experimentelle Möglichkeit zur Online-Prüfung der Superblockzähler wurde implementiert.
    • Ein neues Device-Mapper-Modul „
    • dm-dustwurde hinzugefügt, das das Auftreten von fehlerhaften Blöcken auf dem Medium oder Lesefehlern vom Datenträger simuliert. Dieses Modul erleichtert das Debuggen und Testen von Anwendungen und verschiedenen Speicherlösungen unter Bedingungen, bei denen es zu Ausfällen kommen kann.«, die das Auftreten von Bad-Blocks auf dem Medium oder Lese-Fehler von der Festplatte simuliert. Das Modul erleichtert die Fehlersuche und das Testen von Anwendungen und verschiedenen Speichersystemen unter Bedingungen möglicher Ausfälle;
    • Durchgeführt wurde Signifikante Leistungsoptimierung des BFQ-Eingabe/Ausgabe-Schedulers. Unter hoher Eingabe/Ausgabe-Belastung wurden Optimierungen vorgenommen. ermöglichen, Die Zeit solcher Operationen, wie das Starten von Anwendungen, um bis zu 80 % verkürzt;
    • Eine Reihe von Systemaufrufen zum Einhängen von Dateisystemen wurde hinzugefügt: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() und move_mount(). Diese Systemaufrufe ermöglichen eine separate Verarbeitung der verschiedenen Phasen des Einhängens (Superblock verarbeiten, Informationen über das FS abrufen, einhängen, an einen Einhängepunkt anhängen), die zuvor mit dem allgemeinen Systemaufruf mount() ausgeführt wurden. Getrennte Aufrufe ermöglichen komplexere Einhängeszenarien und die separate Durchführung von Operationen wie die Neubestimmung des Superblocks, das Aktivieren von Optionen, das Ändern des Einhängepunkts und das Verschieben in einen anderen Namensraum. Darüber hinaus erlaubt die getrennte Verarbeitung eine präzise Identifizierung der Ursachen für Fehlermeldungen und die Angabe mehrerer Quellpunkte für mehrschichtige FS, wie overlayfs;
    • Eine neue Operation IORING_OP_SYNC_FILE_RANGE, die Aktionen ausführt, die dem Systemaufruf entsprechen, wurde in die Schnittstelle für asynchrone Eingabe/Ausgabe io_uring hinzugefügt, sync_file_range(), und es wurde die Möglichkeit implementiert, eventfd mit io_uring zu registrieren und Benachrichtigungen über den Abschluss von Operationen zu erhalten;
    • Für das CIFS-Dateisystem wurde ioctl FIEMAP hinzugefügt, das eine effiziente Zuordnung von Extents ermöglicht, sowie Unterstützung für die Modi SEEK_DATA und SEEK_HOLE;
    • Im FUSE-Untersystem vorgeschlagen API zur Verwaltung des Daten-Cachings;
    • In Btrfs wurde die Implementierung von qgroups optimiert und die Ausführung von fsync für Dateien mit mehreren harten Links beschleunigt. Der Code zur Überprüfung der Datenintegrität wurde verbessert, sodass er mögliche Beschädigungen der Informationen im RAM vor dem Schreiben der Daten auf die Festplatte berücksichtigt;
    • In CEPH wurde die Unterstützung für den Export von Snapshots über NFS hinzugefügt;
    • Die Implementierung des Einhängens von NFSv4 im "soft"-Modus wurde verbessert (bei Zugriffsfeldern auf den Server gibt der Aufruf im 'soft'-Modus sofort den Fehlercode zurück, im 'hard'-Modus wird die Steuerung nicht zurückgegeben, bis die FS wieder verfügbar ist oder ein Timeout auftritt). In der neuen Version wurde eine genauere Verarbeitung des Timeouts gewährleistet, die Wiederherstellung nach einem Ausfall beschleunigt und eine neue Einhängeoption 'softerr' hinzugefügt, die es ermöglicht, den Fehlercode (ETIMEDOUT), der bei Eintreten des Timeouts zurückgegeben wird, zu ändern;
    • Im API nfsdcld, das zur Überwachung des Status von NFS-Kunden gedacht ist, wurde die Möglichkeit geschaffen, dass der NFS-Server den Status des Clients nach einem Neustart korrekt überwachen kann. Damit kann der nfsdcld-Daemon jetzt die Rolle eines nfsdcltrack-Handlers übernehmen;
    • Für AFS hinzugefügt Emulation von Byte-Range-Sperren in Dateien (Byte Range Locking);
  • Virtualisierung und Sicherheit
    • Es wurden Maßnahmen ergriffen, um Stellen im Kernel zu beseitigen, die die Ausführung von Code aus beschreibbaren, gemappten Speicherbereichen ermöglichen, um potenzielle Sicherheitslücken zu schließen, die bei Angriffen ausgenutzt werden könnten;
    • Ein neuer Kernel-Befehlszeilenparameter „mitigations=“ wurde hinzugefügt, der eine vereinfachte Möglichkeit bietet, die Aktivierung bestimmter Schutztechniken gegen Spekulationsangriffe im CPU zu steuern. Die Angabe „mitigations=off“ deaktiviert alle vorhandenen Methoden, während der Standardmodus „mitigations=auto“ Schutz aktiviert, jedoch Hyper-Threading nicht beeinflusst. Der Modus „mitigations=auto,nosmt“ deaktiviert zudem Hyper-Threading, wenn dies für die Schutzmethode erforderlich ist.
    • Hinzugefügt Unterstützung für elektronische digitale Signaturen gemäß GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), entwickelt von Vitaliy Chikunov von „Basalt SPO“. In die integrierte TLS-Implementierung wurde Unterstützung für AES128-CCM hinzugefügt. Im Modul crypto_simd wurde Unterstützung für AEAD-Algorithmen hinzugefügt;
    • In Kconfig hinzugefügt gibt es einen separaten Abschnitt „Kernel Hardening“ mit Optionen zur Verstärkung des Schutzes des Kernels. Derzeit sind in dem neuen Abschnitt nur Einstellungen zur Aktivierung von verstärkenden GCC-Plugin-Überprüfungen gesammelt;
    • Der Kernel-Code ist fast von ununterbrochenen Case-Ausdrücken in Switch-Anweisungen befreit (ohne Return oder Break nach jedem Case-Block). Es müssen noch 32 von 2311 Fällen mit dieser Art der Nutzung von Switch korrigiert werden, nach denen im Kernel-Build der Modus „-Wimplicit-fallthrough“ angewendet werden kann; Für die PowerPC-Architektur wurde Unterstützung für Hardware-Mechanismen implementiert, die den unerwünschten Zugang des Kernels zu Daten im Benutzerspeicher einschränken;
    • Klasse MDS (Microarchitectural Data Sampling) in Intel-Prozessoren. Die Anfälligkeit des Systems für diese Sicherheitsanfälligkeit kann über die SysFS-Variable „/sys/devices/system/cpu/vulnerabilities/mds“ überprüft werden.
    • Ein Code zur Blockierung wurde hinzugefügt. Angriffe der MDS (Microarchitectural Data Sampling) Klasse in Intel-Prozessoren. Die Anfälligkeit des Systems gegenüber dieser Schwachstelle kann über die SysFS-Variable «/sys/devices/system/cpu/vulnerabilities/mds» überprüft werden. Verfügbar Zwei Schutzmodi: ein vollständiger, der ein aktualisiertes Microcode erfordert, und ein Umgehungsmodus, der die Bereinigung der CPU-Puffer beim Übergeben der Kontrolle an den Benutzerspeicher oder das Gastsystem nicht vollständig garantiert. Um die Schutzmodi zu steuern, wurde dem Kernel der Parameter „mds=“ hinzugefügt, der die Werte „full“, „full,nosmt“ (+ Deaktivierung der Hyper-Threads) und „off“ annehmen kann;
    • Auf x86-64-Systemen wurde für IRQs, Debugging-Mechanismen und Ausnahmebehandler der Schutz „stack guard-page“ hinzugefügt, der darin besteht, an der Grenze zum Stack Seiten des Speichers einzufügen, deren Zugriffe zu einer Ausnahme (page-fault) führen;
    • Eine sysctl-Einstellung vm.unprivileged_userfaultfd wurde hinzugefügt, die die Möglichkeit steuert, den Systemaufruf userfaultfd() von nicht privilegierten Prozessen zu nutzen;
  • Netzwerksubsystem
    • Hinzugefügt Unterstützung von IPv6-Gateways für IPv4-Routen. Beispielsweise können nun Routing-Regeln der Art „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0“ angegeben werden;
    • Für ICMPv6 wurden ioctl-Aufrufe icmp_echo_ignore_anycast und icmp_echo_ignore_multicast implementiert, um ICMP ECHO für Anycast und
      Multicast-Adressen zu ignorieren. Hinzugefügt Die Möglichkeit, die Intensität der Verarbeitung von ICMPv6-Paketen zu begrenzen;
    • Für das Mesh-Protokoll B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking"), das die Erstellung dezentralisierter Netzwerke ermöglicht, in denen jeder Knoten über benachbarte Knoten verbunden ist, hinzugefügt Unterstützung der Umwandlung von Multicast in Unicast sowie die Möglichkeit der Verwaltung über sysfs;
    • In ethtool wurde hinzugefügt ein neuer Parameter Fast Link Down, der die Zeit verkürzt, die benötigt wird, um Informationen über ein Link-Abschaltungsevent für 1000BaseT zu erhalten (unter normalen Bedingungen beträgt die Verzögerung bis zu 750 ms);
    • Es ist verfügbar die Möglichkeit die Bindung von Foo-Over-UDP-Tunneln an eine bestimmte Adresse, ein Netzwerkinterface oder einen Socket (früher wurde die Bindung nur nach einer allgemeinen Maske durchgeführt);
    • Im Wireless-Stack ist sichergestellt die Möglichkeit, Behandler zu implementieren
      OWE (Opportunistic Wireless Encryption) im Benutzerspeicher;
    • In Netfilter wurde in die nat-Ketten die Unterstützung der Adressfamilie inet hinzugefügt (z. B. kann nun eine Übersetzungsregel verwendet werden, um sowohl ipv4 als auch ipv6 zu behandeln, ohne Regeln für ipv4 und ipv6 zu trennen);
    • In netlink wurde hinzugefügt Modus strikt für die strenge Überprüfung der Richtigkeit aller Nachrichten und Attribute, wobei Überschreitungen der erwarteten Attributgröße nicht erlaubt sind und das Hinzufügen zusätzlichen Daten am Ende der Nachrichten verboten ist;
  • Speicher und Systemdienste
    • Im Systemaufruf clone() wurde die Flagge CLONE_PIDFD hinzugefügt, die es dem übergeordneten Prozess ermöglicht, den Dateideskriptor "pidfd" zurückzugeben, der mit dem erstellten Kindprozess identifiziert wird. Dieser Dateideskriptor kann beispielsweise verwendet werden, um Signale zu senden, ohne sich um Race-Conditions sorgen zu müssen (sofort nach dem Senden des Signals kann die Ziel-PID aufgrund des Endes des Prozesses freigegeben und von einem anderen Prozess verwendet werden);
    • Für die zweite Version von cgroups wurde die Funktionalität des Controllers freezer hinzugefügt, mit dem die Ausführung in einer cgroup gestoppt und vorübergehend einige Ressourcen (CPU, I/O und potenziell sogar Speicher) für die Ausführung anderer Aufgaben freigegeben werden können. Die Steuerung erfolgt über die Steuerdateien cgroup.freeze und cgroup.events im cgroup-Baum. Ein Schreiben von 1 in cgroup.freeze friert die Prozesse in der aktuellen cgroup und allen untergeordneten Gruppen ein. Da das Einfrieren einige Zeit in Anspruch nimmt, wurde zusätzlich die Datei cgroup.events angeboten, um den Abschluss der Operation zu erfahren;
    • Wurde gewährleistet Export von Attributen des Speichers, der an jedem Knoten in sysfs angehängt ist, was es aus dem Benutzerspeicher ermöglicht, die Art der Behandlung von Speicherriegeln in Systemen mit heterogenem Speicher zu bestimmen;
    • Das PSI (Pressure Stall Information)-Subsystem wurde überarbeitet, das es ermöglicht, Informationen über die Wartezeit zum Erhalten verschiedener Ressourcen (CPU, Speicher, I/O) für bestimmte Aufgaben oder Prozessgruppen in einer cgroup zu analysieren. Mit PSI können Benutzerraum-Handler die Auslastung der Systeme und die Art der Verlangsamung im Vergleich zu Load Average genauer einschätzen. In der neuen Version ist die Unterstützung der Einstellung von Sensitivitätsschwellen und die Möglichkeit, den Aufruf poll() für die Benachrichtigung über das Auslösen festgelegter Schwellenwerte innerhalb eines bestimmten Zeitraums zu nutzen, gewährleistet. Diese Funktion ermöglicht es, in Android das frühzeitige Monitoring von Speichermangel zu organisieren, die Quelle von Problemen zu erkennen und unwichtige Anwendungen zu beenden, ohne dass spürbare Probleme für den Benutzer auftreten. Bei Stresstests haben Überwachungswerkzeuge für den Speicherverbrauch auf Basis von PSI im Vergleich zu den Statistiken von vmpressure 10-mal weniger Fehlalarme gezeigt;
    • Der Code für die Überprüfung von BPF-Programmen wurde optimiert, wodurch die Überprüfung bei großen Programmen bis zu 20 Mal schneller erfolgt. Die Optimierung ermöglicht es, das Limit für die Größe von BPF-Programmen von 4096 auf eine Million Instruktionen zu erhöhen.
    • Für BPF-Programme bereitgestellt die Möglichkeit des Zugriffs auf globale Daten, was das Definieren globaler Variablen und Konstanten in den Programmen erlaubt;
    • Hinzugefügt API, die es ermöglichen, aus BPF-Programmen heraus Änderungen der sysctl-Parameter zu steuern;
    • Für die Architektur MIPS32 wurde ein JIT-Compiler für die eBPF-virtuelle Maschine implementiert;
    • Für die 32-Bit-Architektur PowerPC wurde die Unterstützung für das Debugging-Tool KASan (Kernel Address Sanitizer) hinzugefügt, welches die Fehlererkennung im Umgang mit Speicher ermöglicht;
    • Auf x86-64-Systemen wurde die Beschränkung für die Platzierung von Kernel-Crash-Dumps (crash-dump) in den Speicherebenen über 896 MB aufgehoben;
    • Für die s390-Architektur wurde die Unterstützung für die Randomisierung des Kernel-Adressraums (KASLR) und die Möglichkeit zur Überprüfung von digitalen Signaturen beim Booten des Kernels über kexec_file_load() implementiert;
    • Für die PA-RISC-Architektur wurde die Unterstützung für den Kernel-Debugger (KGDB), Sprungmarken und kprobes hinzugefügt;
  • Ausrüstung
    • Der Treiber Lima für die GPU Mali 400/450, die in vielen alten Chips auf ARM-Architektur verwendet wird. Für neuere GPUs von Mali wurde der Panfrost-Treiber hinzugefügt, der Chips auf Basis der Mikroarchitekturen Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) und Bifrost (Mali G3x, G5x, G7x) unterstützt;
    • Die Unterstützung von Audiogeräten, die offene Firmware verwenden, wurde hinzugefügt. Sound Open Firmware (SOF). Trotz der Verfügbarkeit offener Treiber blieb der Code für die Firmware von Audiokarten nach wie vor geschlossen und wurde binär bereitgestellt. Das Projekt Sound Open Firmware wurde von Intel ins Leben gerufen, um offene Firmware für DSP-Chips, die mit der Audiobearbeitung verbunden sind, zu schaffen (später kam auch Google zur Entwicklung hinzu). Derzeit sind bereits offene Firmware-Pakete für Audiokarten der Intel-Plattformen Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake und IceLake im Rahmen des Projekts vorbereitet;
    • Im DRM-Treiber von Intel (i915) wurde die Unterstützung für die Chips
      Elkhartlake (Gen11) hinzugefügt. PCI-IDs für die Chips Comet Lake (Gen9) wurden hinzugefügt. Die Unterstützung für die Chips Icelake wurde stabilisiert, für die zusätzlich weitere PCI-Geräte-IDs hinzugefügt wurden.
      Aktiviert
      Der asynchrone Wechselmodus zwischen zwei Puffern im Videospeicher (async flip) bei Schreiboperationen über mmio hat die Leistung einiger 3D-Anwendungen erheblich gesteigert (z. B. stieg die Leistung im 3DMark Ice Storm Test um 300-400 %). Unterstützung für die Technologie hinzugefügt HDCP2.2 ((High-bandwidth Digital Content Protection) zum Verschlüsseln von Videosignalen, die über HDMI übertragen werden;
    • Im amdgpu-Treiber für die GPU Vega20 hinzugefügt Unterstützung für RAS (Reliability, Availability, Serviceability) und experimentelle Unterstützung des SMU 11-Subsystems, das die Powerplay-Technologie ersetzt hat. Für die GPU Vega12 hinzugefügt Unterstützung des BACO-Modus (Bus Active, Chip Off). Erstmalige Unterstützung von XGMI, einer Hochgeschwindigkeitsbusverbindung (PCIe 4.0) zur Verbindung von GPUs. Im amdkfd-Treiber wurden fehlende Identifikatoren für Karten auf Basis der GPU Polaris10 hinzugefügt;
    • Im Nouveau-Treiber wurde Unterstützung für Karten auf Basis des NVIDIA Turing 117 Chipsatzes (TU117, verwendet in GeForce GTX 1650) hinzugefügt. In
      kconfig hinzugefügt Einstellungen zum Deaktivieren veralteter Funktionen, die in aktuellen Versionen von libdrm nicht mehr verwendet werden;
    • Im DRM-API und im amdgpu-Treiber wurde Unterstützung für Synchronisationsobjekte "Timeline" hinzugefügt, die es ermöglichen, ohne klassische Sperren auszukommen.
    • Der vboxvideo-Treiber für die virtuelle GPU VirtualBox wurde aus der Staging-Zweig in die Hauptversion übernommen;
    • Ein aspeed-Treiber für den GFX-Chip SoC ASPEED wurde hinzugefügt;
    • Unterstützung für ARM SoCs und Intel Agilex-Platinen (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

Gleichzeitig Lateinamerikanischer Fonds für freies Software ein vollständig freies Kernels 5.6
Variante vollständig freies Kernel 5.2Linux-libre 5.2-gnu, das von Firmware- und Treiberelementen befreit ist, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Nutzung durch den Hersteller eingeschränkt ist. In der neuen Version wird das Laden von Dateien
Sound Open Firmware. Das Laden von Blobs in den Treibern
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp und ucsi_ccg wurde deaktiviert. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen ixp4xx, imx-sdma, amdgpu, nouveau und goya sowie in der Dokumentation zum Mikrokode wurde aktualisiert. Die Bereinigung von Blobs im Treiber r8822be wurde aufgrund seiner Entfernung eingestellt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4