Nach zwei Monaten Entwicklung stellte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.11 vor. Zu den bemerkenswertesten Änderungen gehören: Unterstützung für Intel SGX-Enklaven, ein neuer Mechanismus zur Abfangen von Systemaufrufen, der virtuelle Bus "auxiliary", das Verbot der Module ohne MODULE_LICENSE(), der Schnellfiltermodus für Systemaufrufe in seccomp, das Ende der Unterstützung für die IA-64-Architektur, die Aufnahme der WiMAX-Technologie in den "staging"-Zweig und die Möglichkeit, SCTP in UDP zu kapseln.
In die neue Version wurden 15.480 Korrekturen von 1.991 Entwicklern integriert, die Patchgröße beträgt 72 MB (die Änderungen betreffen 12.090 Dateien, es wurden 868.025 Zeilen Code hinzugefügt und 261.456 Zeilen entfernt). Etwa 46 % aller Änderungen in 5.11 beziehen sich auf Gerätetreiber, etwa 16 % betreffen die Aktualisierung von architekturspezifischem Code, 13 % beziehen sich auf den Netzwerkstack, 3 % auf Dateisysteme und 4 % auf interne Subsysteme des Kernels.
Hauptneuheiten:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Btrfs wurden mehrere Montageoptionen hinzugefügt, die beim Wiederherstellen von Daten von einer beschädigten FS angewendet werden: „rescue=ignorebadroots“ zum Montieren trotz Schäden an bestimmten Wurzelbäumen (Extent, UUID, Datenrelokation, Gerät, Prüfzsumme, freier Speicher), „rescue=ignoredatacsums“ zur Deaktivierung der Prüfzsumme für Daten und „rescue=all“ zur gleichzeitigen Aktivierung der Modi ‚ignorebadroots‘, ‚ignoredatacsums‘ und ‚nologreplay‘. Die Unterstützung der Montageoption „inode_cache“, die zuvor als veraltet erklärt wurde, wurde eingestellt. Der Code wurde vorbereitet, um die Unterstützung für Blöcke mit Metadaten und Daten, die kleiner als die Seite (PAGE_SIZE) sind, sowie die Unterstützung für den Modus der zonierten Platzzuweisung zu implementieren. Unbuffered (Direct IO) Anfragen wurden auf die iomap-Infrastruktur umgestellt. Die Leistung mehrerer Operationen wurde optimiert; in einigen Fällen können die Geschwindigkeitsgewinne bis zu mehreren Prozent betragen.
- In XFS wurde das Flag „needsrepair“ implementiert, das signalisiert, dass eine Wiederherstellung erforderlich ist. Wenn dieses Flag gesetzt ist, kann das FS nicht gemountet werden, bis das Flag mit dem Tool xfs_repair zurückgesetzt wird.
- In Ext4 wurden nur Fehlerbehebungen und Optimierungen vorgenommen, und der Code wurde bereinigt.
- Die erneute Exportierung von Dateisystemen, die über NFS bereitgestellt werden (d.h. ein über NFS eingehängter Teil kann nun über NFS exportiert werden und als temporärer Cache verwendet werden), ist erlaubt.
- Im Systemaufruf close_range(), der es einem Prozess ermöglicht, einen gesamten Bereich offener Dateideskriptoren gleichzeitig zu schließen, wurde die Option CLOSE_RANGE_CLOEXEC hinzugefügt, um Deskriptoren im Close-on-Exec-Modus zu schließen.
- Im Dateisystem F2FS wurden neue ioctl()-Aufrufe hinzugefügt, die es dem Benutzerraum ermöglichen, zu steuern, welche Dateien komprimiert gespeichert werden. Eine Mount-Option „compress_mode=“ wurde hinzugefügt, um auszuwählen, ob der Komprimierungssteuerungs-Handler im Kernel oder im Benutzerraum platziert wird.
- Es wurde die Möglichkeit geschaffen, Overlayfs von nicht privilegierten Prozessen unter Verwendung eines separaten Benutzer-Namespaces zu mounten. Um die Einhaltung des Sicherheitsmodells zu überprüfen, wurde ein vollständiges Code-Audit durchgeführt. Darüber hinaus wurde die Möglichkeit hinzugefügt, Overlayfs mit Kopien von Dateisystem-Images zu starten, indem die UUID-Prüfung optional deaktiviert wird.
- Im Ceph-Dateisystem wurde die Unterstützung des msgr2.1-Protokolls eingeführt, das die Anwendung des AES-GCM-Algorithmus für die Datenübertragung in verschlüsselter Form ermöglicht.
- Im dm-multipath-Modul wurde die Berücksichtigung der IO-Affinität bei der Auswahl von Ein-/Ausgabewegen implementiert.
- Speicher und Systemdienste
- Ein neues Mechanismus für die Abfangung von Systemaufrufen wurde hinzugefügt, basierend auf prctl(), der es ermöglicht, Ausnahmen aus dem Benutzerspeicher zu generieren, wenn auf einen bestimmten Systemaufruf zugegriffen wird, und die Ausführung zu emulieren. Diese Funktionalität ist in Wine und Proton gefragt, um Windows-Systemaufrufe zu emulieren, was für die Kompatibilität mit Spielen und Programmen erforderlich ist, die Systemaufrufe direkt außerhalb der Windows-API ausführen (zum Beispiel zum Schutz vor unbefugter Nutzung).
- Im Systemaufruf userfaultfd(), der für die Verarbeitung von Page Faults (Zugriffe auf nicht zugewiesene Speicherseiten) im Benutzerspeicher zuständig ist, wurde die Möglichkeit hinzugefügt, die Verarbeitung von Ausnahmen auf Kernel-Ebene zu deaktivieren, um die Ausnutzung bestimmter Schwachstellen zu erschweren.
- Die BPF-Subsystem hat Unterstützung für task-lokalen Speicher hinzugefügt, der eine Bindung von Daten an einen bestimmten BPF-Handler ermöglicht.
- Die Erfassung des Speicherverbrauchs durch BPF-Anwendungen wurde vollständig überarbeitet – zur Verwaltung des Speicherverbrauchs in BPF-Objekten wird anstelle von memlock rlimit ein cgroup-Controller vorgeschlagen.
- Im BTF-Mechanismus (BPF Type Format), der Informationen zur Typüberprüfung im Pseudocode BPF bereitstellt, wurde die Unterstützung für Kernel-Module implementiert.
- Die Schnittstelle für asynchrones I/O io_uring unterstützt jetzt die Systemaufrufe shutdown(), renameat2() und unlinkat(). Bei einem Aufruf von io_uring_enter() kann nun ein Timeout angegeben werden (um die Unterstützung des Arguments zur Timeout-Angabe zu überprüfen, nutzen Sie das Flag IORING_FEAT_EXT_ARG).
- Die ia64-Architektur, die in Intel Itanium-Prozessoren verwendet wird, wurde in die Kategorie der nicht mehr unterstützten Systeme („orphaned“) eingestuft, was das Ende der Testphase bedeutet. Hewlett Packard Enterprise hat die Annahme von Bestellungen für neue Itanium-Hardware eingestellt, während Intel dies bereits im vergangenen Jahr getan hat.
- Die Unterstützung für Systeme auf Basis der MicroBlaze-Architektur ohne Memory Management Unit (MMU) wurde eingestellt. Solche Systeme sind mittlerweile sehr selten geworden.
- Für die MIPS-Architektur wurde die Unterstützung für die Codeabdeckungsprüfung (coverage testing) mit dem Tool gcov hinzugefügt.
- Die Unterstützung für den virtuellen Bus Auxiliary wurde hinzugefügt, um die Interaktion mit multifunktionalen Geräten zu ermöglichen, die Funktionalitäten kombinieren, die unterschiedliche Treiber erfordern (z. B. Netzwerkkarten mit Unterstützung für Ethernet und RDMA). Der Bus kann verwendet werden, um primäre und sekundäre Treiber für ein Gerät zuzuweisen, wenn die Verwendung der MFD (Multi-Function Devices) Subsysteme problematisch ist.
- Für die RISC-V Architektur wurde die Unterstützung des CMA (Contiguous Memory Allocator) Speichermanagementsystems hinzugefügt, das optimiert ist, um große zusammenhängende Speicherbereiche unter Verwendung der Paging-Technik zuzuweisen. Für RISC-V wurden auch Maßnahmen zur Beschränkung des Zugriffs auf /dev/mem und zur Erfassung der Interrupt-Verarbeitungszeiten implementiert.
- Für 32-Bit ARM-Systeme wurde die Unterstützung des Debugging-Tools KASan (Kernel Address Sanitizer) hinzugefügt, das hilft, Speicherfehler zu identifizieren. Für 64-Bit ARM-Systeme wurde die Implementierung von KASan auf die Verwendung von MTE (MemTag) Tags umgestellt.
- Der Systemaufruf epoll_pwait2() wurde hinzugefügt, um Timeouts mit Nanosekundenpräzision zu ermöglichen (der Aufruf epoll_wait arbeitet mit Millisekunden).
- Im Build-System wird nun ein Fehler ausgegeben, wenn beim Versuch, Kernel-Module zu erstellen, mit dem Makro MODULE_LICENSE() keine Lizenz für den Code definiert ist. Die Verwendung des Makros EXPORT_SYMBOL() für statische Funktionen führt ebenfalls zu einem Fehler beim Build-Prozess.
- Die Unterstützung für das Mappen von GEM-Objekten aus für Ein-/Ausgabe genutztem Speicher wurde hinzugefügt, was die Arbeit mit dem Framebuffer auf bestimmten Architekturen beschleunigt.
- Die Unterstützung für Qt4 wurde in Kconfig eingestellt (Qt5, GTK und Ncurses bleiben unterstützt).
- Virtualisierung und Sicherheit
- Der Systemaufruf seccomp() hat Unterstützung für den Schnellreaktionsmodus erhalten, der es ermöglicht, sehr schnell zu bestimmen, ob ein bestimmter Systemaufruf basierend auf der an den Prozess angehängten Berechtigungstabelle (constant-action bitmap) erlaubt oder verweigert ist, ohne einen BPF-Handler auszuführen.
- Kernkomponenten zur Erstellung und Verwaltung von Enklaven auf Basis der Intel SGX-Technologie (Software Guard eXtensions) wurden integriert, die es Anwendungen ermöglichen, Code in isolierten, verschlüsselten Speicherbereichen auszuführen, wobei der Zugang zur restlichen System-Umgebung eingeschränkt ist.
- Im Rahmen der Initiative zur Begrenzung des Zugriffs aus dem Benutzerspeicher auf die MSR (model-specific register) ist das Schreiben in das Register MSR_IA32_ENERGY_PERF_BIAS untersagt, welches es ermöglicht, den Energiesparmodus des Prozessors zu ändern ("normal", "performance", "powersave").
- Aus dem Kernel-RT-Zweig für Echtzeitsysteme wurde die Möglichkeit übernommen, die Migration von hochpriorisierten Aufgaben zwischen CPUs zu deaktivieren.
- Für ARM64-Systeme wurde die Möglichkeit hinzugefügt, MTE-Tags (MemTag, Memory Tagging Extension) für die Adressen von Signalhandlern zu verwenden. Die Nutzung von MTE wird durch die Angabe der Option SA_EXPOSE_TAGBITS in sigaction() aktiviert und ermöglicht die Überprüfung der korrekten Verwendung von Zeigern zur Vermeidung der Ausnutzung von Sicherheitslücken, die durch Zugriffe auf bereits freigegebene Speicherblöcke, Pufferüberläufe, Zugriffe vor der Initialisierung und Verwendung außerhalb des aktuellen Kontexts verursacht werden.
- Die Option „DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING“ wurde hinzugefügt, die es dem dm-verity-Subsystem erlaubt, die Hash-Signaturen von Zertifikaten zu überprüfen, die im sekundären Schlüsselbund (Keyring) abgelegt sind. Praktisch ermöglicht diese Einstellung die Verifizierung nicht nur von im Kernel integrierten Zertifikaten, sondern auch von zur Laufzeit geladenen Zertifikaten, was die Aktualisierung von Zertifikaten ohne ein komplettes Kernel-Update ermöglicht.
- User-mode Linux unterstützt jetzt den suspend-to-idle-Modus, der es ermöglicht, die Umgebung einzufrieren und das Signal SIGUSR1 zum Aufwachen aus dem Schlafzustand zu verwenden.
- Im virtio-mem-Mechanismus, der das Hot-Plugging und -Unplugging von Speicher an virtuellen Maschinen ermöglicht, wurde die Unterstützung für den Big Block Mode (BBM) hinzugefügt, der es erlaubt, Speicher in Blöcken zu übertragen oder zu entnehmen, die größer sind als die Blockgröße des Kernels, was zur Optimierung von VFIO in QEMU erforderlich ist.
- In der Kernimplementierung von TLS wurde die Unterstützung des Chiffre CHACHA20-POLY1305 hinzugefügt.
- Netzwerksubsystem
- Für 802.1Q (VLAN) wurde ein Fehlerverwaltungsmechanismus (CFM, Connectivity Fault Management) implementiert, der es ermöglicht, Störungen in Netzwerken mit virtuellen Brücken (Virtual Bridged Networks) zu identifizieren, zu verifizieren und einzugrenzen. Beispielsweise kann CFM verwendet werden, um Probleme in Netzwerken zu lokalisieren, die mehrere unabhängige Organisationen umfassen, deren Mitarbeiter nur Zugriff auf ihre eigene Hardware haben.
- Die Unterstützung für die Kapselung von SCTP-Protokolldaten in UDP-Paketen (RFC 6951) wurde hinzugefügt, was die Nutzung von SCTP in Netzwerken mit älteren Adressübersetzern ermöglicht, die SCTP nicht direkt unterstützen, sowie die Implementierung von SCTP auf Systemen, die keinen direkten Zugriff auf die IP-Ebene bieten.
- Die Implementierung der WiMAX-Technologie wurde in den Staging-Bereich verschoben und soll in Zukunft entfernt werden, wenn keine Benutzer gefunden werden, die WiMAX benötigen. WiMAX wird bereits nicht mehr in öffentlichen Netzen verwendet, und im Kern bleibt der einzige Treiber, der WiMAX unterstützt, der veraltete Intel 2400m-Treiber. Die Unterstützung von WiMAX im Netzwerkmanager NetworkManager wurde 2015 eingestellt. Derzeit wird WiMAX praktisch vollständig durch Technologien wie LTE, HSPA+ und Wi-Fi 802.11n ersetzt.
- Optimierung der Leistung bei der Verarbeitung von eingehendem TCP-Verkehr im Zerocopy-Modus wurde durchgeführt, d.h. ohne zusätzliche Kopierung in neue Puffer. Für Verkehr mittlerer Größe, der Dutzende oder mehrere Hundert Kilobyte Daten umfasst, zeigt der Einsatz von Zerocopy im Vergleich zu recvmsg() deutlich bessere Effizienz. Beispielsweise konnte die Effizienz der Verarbeitung von RPC-Verkehr mit Nachrichten von 32 KB durch die Verwendung von Zerocopy um 60-70 % gesteigert werden.
- Neue ioctl() Aufrufe wurden hinzugefügt, um Netzwerkbrücken zu erstellen, die mehrere PPP-Kanäle abdecken. Die vorgeschlagene Funktion ermöglicht es Rahmen, von einem Kanal zu einem anderen zu wechseln, z.B. von PPPoE zu einer PPPoL2TP-Sitzung.
- Die Integration in den MPTCP-Kernel (MultiPath TCP), eine Erweiterung des TCP-Protokolls zur Organisation von TCP-Verbindungen mit gleichzeitiger Paketzustellung über mehrere Routen durch verschiedene Netzwerkschnittstellen, die an unterschiedliche IP-Adressen gebunden sind, wurde fortgesetzt. In der neuen Ausgabe wurde die Unterstützung für die Option ADD_ADDR zur Ankündigung verfügbarer IP-Adressen Verbindungen bei der Hinzufügung neuer Streams zu einer bestehenden MPTCP-Verbindung implementiert.
- Die Möglichkeit zur Anpassung von Aktionen bei Überschreitung des Budgets für das Busy-Polling wurde hinzugefügt. Der zuvor verfügbare SO_BUSY_POLL-Modus sah vor, bei Ausschöpfung des Budgets auf SoftIRQ umzuschalten. Für Anwendungen, die weiterhin Polling verwenden müssen, wurde die neue Option SO_PREFER_BUSY_POLL eingeführt.
- In IPv6 wurde die Unterstützung für die SRv6 End.DT4 und End.DT6 Modi implementiert, die zur Erstellung von Multi-User IPv4 L3 verwendet werden. VPN und VRF-Geräten (Virtual Routing and Forwarding).
- Im Netfilter wurde die Implementierung von Ausdruckssets vereinheitlicht, was die Angabe mehrerer Ausdrücke für jedes Element der Set-Listen ermöglicht.
- Im Wireless-Stack 802.11 wurden APIs zur Konfiguration von Leistungsbeschränkungen für SAR sowie der Parameter AE PWE und HE MCS hinzugefügt. Im Intel iwlwifi-Treiber wurde die Unterstützung für das 6 GHz-Band (Ultra High Band) hinzugefügt. Im Qualcomm Ath11k-Treiber wurde die Unterstützung für die Technologie zur schnellen Verbindungsherstellung FILS (Fast Initial Link Setup, standardisiert als IEEE 802.11ai) integriert, die Verzögerungen beim Roaming beim Wechsel von einem Zugangspunkt zu einem anderen beseitigt.
- Ausrüstung
- Im amdgpu-Treiber wird die Unterstützung für die APU AMD „Grüne Sardine“ (Ryzen 5000) und die GPU „Dimgrey Cavefish“ (Navi 2) realisiert, sowie erste Unterstützung für die APU AMD Van Gogh mit Zen 2-Kern und RDNA 2 GPU (Navi 2). Zusätzlich wurde die Unterstützung neuer Identifikatoren der APU Renoir (basierend auf Zen 2 CPU und Vega GPU) hinzugefügt.
- Im i915-Treiber für Intel-Grafikkarten wurde die Unterstützung der IS-Technologie (Integer Scaling) implementiert, die einen Filter zur Skalierung unter Berücksichtigung des Zustands benachbarter Pixel (Nearest-neighbor-Interpolation) verwendet, um die Farbe fehlender Pixel zu bestimmen. Zudem wurde die Unterstützung für die diskreten Karten Intel DG1 erweitert. Die „Big Joiner“-Technologie, die in den Chips Ice Lake / Gen11 vorhanden ist, ermöglicht den Einsatz eines Transcoders zur Verarbeitung von zwei Streams, beispielsweise um über einen DisplayPort auf einen 8K-Bildschirm auszugeben. Ein asynchroner Umschaltmodus zwischen zwei Puffern im Videospeicher (async flip) wurde hinzugefügt.
- Im nouveau-Treiber wurde die erste Unterstützung für NVIDIA-GPUs auf Basis der Mikroarchitektur „Ampere“ (GA100, GeForce RTX 30xx) hinzugefügt, vorerst jedoch nur für die Verwaltung von Video-Modi.
- Unterstützung für das 3WIRE-Protokoll, das in LCD-Panels verwendet wird, wurde hinzugefügt. Unterstützung für die Panels novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 und ABT Y030XX067A 3.0 wurde integriert. Besonders bemerkenswert ist die Unterstützung für das Display der Smartphones OnePlus 6 und 6T, die die Nutzung eines unmodifizierten Kernels auf diesen Geräten ermöglicht.
- Die Unterstützung des ersten diskreten USB4-Hostcontrollers Intel Maple Ridge wurde hinzugefügt.
- Unterstützung für Audio-Codecs: Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI und XCVR, Realtek RT715 und Qualcomm SM8250 wurde integriert.
- Unterstützung für ARM-Plattformen, Geräte und Plattformen: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik auf Basis von Marvell Prestera 98DX3236, Server mit Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, Chromebook ‚Trogdor‘, Kobol Helios64, Engicam PX30.Core wurde hinzugefügt.
- Unterstützung für die Spielekonsole Ouya auf Basis von NVIDIA Tegra 3 wurde integriert.
Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 5.11 – Linux-libre 5.11-gnu – entwickelt, die von Firmware-Elementen und Treibern bereinigt wurde, die nicht-freie Komponenten oder Bereiche von Code enthalten, deren Verwendung durch den Hersteller eingeschränkt ist. In der neuen Version wurden Treiber für qat_4xxx (Krypto), lt9611uxcm (DSI/HDMI-Brücke), ccs/smia++ (Sensor), ath11k_pci, nxp Audio-Transceiver und MHI PCI-Controller bereinigt. Der Code für die Bereinigung von Blobs in den Treibern und Subsystemen amdgpu, btqca, btrtl, btusb und i915 csr wurde aktualisiert. Neue Blobs in m3 rproc, idt82p33 PTP-Uhr und Qualcomm arm64 wurden deaktiviert.
Quelle: opennet.ru
