Nach zwei Monaten Entwicklung hat Linus Torvalds die Version 6.10 des Linux-Kernels vorgestellt. Zu den bemerkenswertesten Änderungen gehören: der ntsync-Treiber mit Synchronisationsprimitive für Windows NT, DRM-Panic-Komponenten zur Umsetzung eines Äquivalents des "blauen Bildschirms der Trauer", die Einstellung der Unterstützung für alte Alpha-CPUs, die Möglichkeit zur Integritätsüberprüfung im FUSE-basierten Dateisystem, die Einschränkung des Zugriffs auf ioctl über den Landlock-Mechanismus, ein Subsystem zur Profilierung von Speicheroperationen, der Systemaufruf mseal(), die Möglichkeit des verschlüsselten Datenaustauschs mit TPM-Geräten sowie die Unterstützung von hochpriorisierten Warteschlangen in dm-crypt und der panthor-Treiber für die zehnte Generation von Mali-GPUs.
In die neue Version wurden 14.564 Fehlerbehebungen von 1.989 Entwicklern aufgenommen, die Patchgröße beträgt 41 MB (Änderungen betreffen 12.509 Dateien, hinzugefügt wurden 547.663 Codezeilen, 312.464 Zeilen wurden entfernt). Im vorherigen Release gab es 15.680 Fehlerbehebungen von 2.106 Entwicklern, die Patchgröße betrug 54 MB. Etwa 41 % der in 6.10 vorgestellten Änderungen beziehen sich auf Gerätetreiber, etwa 15 % der Änderungen betreffen die Aktualisierung von hardware-spezifischem Code, 13 % sind mit dem Netzwerk-Stack verbunden, 5 % mit Dateisystemen und 4 % mit internen Teilsystemen des Kerns.
Wesentliche Neuerungen im Kernel 6.10:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Eine neue fcntl-Operation F_DUPFD_QUERY wurde hinzugefügt, mit der ein Prozess feststellen kann, dass zwei verschiedene Dateideskriptoren auf dieselbe Datei verweisen. Im Gegensatz zu ähnlichen Möglichkeiten, die durch den Systemaufruf kcmp() bereitgestellt werden, führt F_DUPFD_QUERY nicht zur Offenlegung zusätzlicher Informationen und funktioniert auch auf Systemen mit deaktiviertem kcmp().
- Im FUSE-Subsystem, das für die Implementierung von Dateisystemen im Benutzermodus verwendet wird, wurde die Möglichkeit implementiert, den fs-verity-Mechanismus zur Überprüfung der Integrität und Authentizität von Dateien anzuwenden.
- Im Modul dm-crypt, das für die Verschlüsselung von Blockgeräten verwendet wird, wurde die Option „high_priority“ hinzugefügt. Diese ermöglicht es, hochpriorisierte Arbeitswarteschlangen zu nutzen, um die Leistung auf leistungsstarken Systemen zu steigern. ServernStandardmäßig ist der Modus deaktiviert, da er auf herkömmlichen PCs zu erhöhten Verzögerungen bei nicht verschlüsselungsbezogenen Aufgaben, wie z.B. bei der Audioverarbeitung, führen kann.
- Ein netlink-basierter Protokoll zur Verwaltung des NFS-Servers wurde in den Kernel integriert. Im Benutzerraum wurde auf Basis dieses Protokolls das Tool nfsdctl vorbereitet. Die Unterstützung für das Mounten von NFS v2 ist standardmäßig deaktiviert (in der Mount.nfs-Utility wurde die Unterstützung für NFS v2 bereits 2021 eingestellt).
- In dem Dateisystem XFS wird weiterhin an der Implementierung der Möglichkeit gearbeitet, das Tool fsck zur Überprüfung und Behebung von Problemen im Online-Modus zu verwenden, ohne das Dateisystem aushängen zu müssen. Zudem wurde der ioctl Befehl XFS_IOC_EXCHANGE_RANGE für den atomaren Austausch von Bytebereichen zwischen zwei Dateien hinzugefügt.
- In Btrfs wurde die Unterstützung für das Trimmen (shrinker) nicht fester zugewiesener Extentkarten implementiert, was hilfreich sein kann, um den Speicherbedarf unter speicherarmen Bedingungen zu reduzieren. Der Code zur Datenkomprimierung und die Funktion put_file_data() wurden auf die Verwendung von Seitenfolio (page folios) umgestellt. Der Mechanismus zur Sperrung von Extents wurde bei der Durchführung von Rückschreiboperationen überarbeitet.
- Im Ext4-Dateisystem wurde die Unterstützung für den ioctl FS_IOC_GETFSSYSFSPATH hinzugefügt, um den Speicherort eines bestimmten, eingebundenen Dateisystems in der Hierarchie /sys/fs zu bestimmen.
- Die Dateisysteme OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX und FREEVXFS wurden auf die Nutzung der neuen API zur Partitionierung umgestellt.
- Im EROFS (Extendable Read-Only File System), das für die Verwendung auf im Nur-Lese-Modus zugänglichen Partitionen ausgelegt ist, wurde die Unterstützung für den Zstandard-Komprimierungsalgorithmus hinzugefügt.
- In Bcachefs wurde die Vorbereitung für die Durchführung von fsck ohne das Aushängen der Partition (Online-Überprüfung) getroffen. Änderungen und Verbesserungen wurden hinzugefügt, um die Zuverlässigkeit zu erhöhen. Die Möglichkeit zur Aktualisierung und Rückgängigmachung des Dateisystemformats im Modus 'nochanges', der das Schreiben deaktiviert und Metadaten nur im Speicher speichert, wurde implementiert.
- In das OverlayFS-Dateisystem wurde die Unterstützung für die Erstellung temporärer Dateien mit der Option O_TMPFILE hinzugefügt.
- Die Unterstützung des Mechanismus zur Begrenzung der Bandbreite von Blockgeräten „CONFIG_BLK_DEV_THROTTLING_LOW“ wurde eingestellt, da er seit 2017 experimentellen Status hatte, in der Praxis nicht weit verbreitet war und die Wartung der Blockgerätesubsysteme erschwerte.
- Speicher und Systemdienste
- Ein Treiber namens ntsync wurde hinzugefügt, jedoch beim Bauen deaktiviert. Er implementiert das symbolische Gerät /dev/ntsync und eine Reihe von Synchronisationsprimitive, die im Windows NT-Kernel verwendet werden. Die Implementierung solcher Primitive auf Kernel-Ebene ermöglicht eine signifikante Steigerung der Leistung von Windows-Spielen, die über Wine ausgeführt werden. Der Leistungsschub wird durch die Beseitigung der Benutzerraum-RPC-bedingten Overhead-Kosten erreicht. Die Schaffung eines separaten Treibers für den Linux-Kernel erklärt sich aus den Schwierigkeiten einer korrekten Implementierung der NT-Synchronisations-API über bestehende Primitive im Kernel.
- Ein neues Subsystem zur Analyse des Speicherallokationsverhaltens im Linux-Kernel wurde hinzugefügt. Es ermöglicht die Identifizierung von Speicherlecks im Kernel und erleichtert die Optimierung des Speicherverbrauchs. Das Subsystem sorgt für geringe Overheads, sodass es nicht nur in Debug-Versionen des Kernels, sondern auch in Produktionssystemen verwendet werden kann.
- Eine erste Implementierung des Notfallhandlers im Kernel — DRM Panic — wurde hinzugefügt. Dieser verwendet das DRM (Direct Rendering Manager)-Subsystem, um einen anschaulichen farbigen Bericht im Stil des 'blauen Bildschirmes des Todes' anzuzeigen. In der nächsten Version wird die Möglichkeit hinzugefügt, ein Logo und einen QR-Code auf dem Bildschirm anzuzeigen, wenn ein Notfallzustand auftritt.
- Die Änderungen aus dem Rust-for-Linux-Branch zur Verwendung von Rust als zweiter Sprache für die Entwicklung von Treibern und Kernelmodulen wurden fortgesetzt (Die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört). Es wurde auf die Rust-Version 1.78 umgestellt, die es ermöglicht, die Standardbibliothek alloc anstelle eines eigenen Forks zu verwenden. Es wurden Abstraktionen für die Arbeit mit Zeit im Kernel hinzugefügt (Wrapper über die Struktur ktime_t). Außerdem wurde die Unterstützung für die Verwendung von Kernelkomponenten in Rust auf RISC-V-Architekturen hinzugefügt.
- In den BPF-Programmen wurde die Möglichkeit zur Nutzung von Warteschlangen (wait queue) im Kernel implementiert. Es wurden die Funktionen bpf_preempt_disable und bpf_preempt_enable hinzugefügt, die es ermöglichen, nicht unterbrechbare Abschnitte mit Code im Scheduler zu erstellen. Zudem wurde BPF-Programmen der Zugang zu den kryptografischen Funktionen des Kernels (crypto) gewährt. Die Unterstützung der JIT-Kompilierung von BPF-Programmen auf Systemen mit 32-Bit-Prozessoren (ARCv2) wurde realisiert.
- Für 32-Bit ARM-Systeme wurde die Unterstützung für den Kernel-Build mit dem Clang-Compiler unteraktiviert, einschließlich des CFI (Control Flow Integrity) Modus, der Störungen des normalen Ausführungsflusses durch Exploits, die in der Speicherumgebung gespeicherte Funktionszeiger ändern, blockiert.
- Es wurde die Möglichkeit hinzugefügt, Ringpuffer-Traceing direkt über mmap() zu spiegeln, um deren Inhalte ohne zusätzliche Kopierung in den Benutzerspeicher zu übertragen.
- Der Systemaufruf „mseal“ wurde hinzugefügt, mit dem Prozesse eine Sperre für die Änderung bestimmter Teile ihres Adressraums setzen können. Praktisch wird dieser neue Systemaufruf im Chrome-Browser zur Verbesserung der Sandbox-Isolierung eingesetzt.
- Für die Subarchitektur x32, die eine hybride x86_64 ABI bereitstellt und die Verwendung des 32-Bit-Speichermodells auf 64-Bit-Systemen ermöglicht (der Prozessor arbeitet im 64-Bit-Modus, verwendet jedoch 32-Bit-Zeiger und -arithmetische Operationen), wurde Unterstützung für den Shadow Stack-Mechanismus hinzugefügt. Dieser ermöglicht es, viele Exploits zu blockieren, indem die Hardwarefähigkeiten von Intel-Prozessoren zum Schutz vor der Überschreibung der Rücksprungadresse in Funktionen im Falle eines Stack-Überlaufs genutzt werden.
- In Systemen mit ARM64-Architektur wurden im Systemaufruf userfaultfd(), der die Möglichkeit bietet, Handler für Zugriffe auf nicht zugewiesene Speicherseiten (page faults) im Benutzerspeicher zu erstellen, Funktionen implementiert, die mit dem Schutz vor dem Schreiben in Speicherbereiche und Elemente der Seitentabelle zusammenhängen.
- Der Code zur Unterstützung der seit 1995 produzierten Alpha 21164 (EV5) Prozessoren und früherer Serien wurde entfernt. Die Wartung des Codes für diese Prozessoren gestaltete sich als kompliziert aufgrund des Fehlens der Möglichkeit, auf Byte-Ebene auf den Speicher zuzugreifen. Alpha war die erste Architektur, auf der der Linux-Kernel portiert wurde, der ursprünglich nur für x86-Systeme verfügbar war.
- Virtualisierung und Sicherheit
- Die Unterstützung für die verschlüsselte Datenübertragung mit TPM-Geräten (Trusted Platform Module) und die Integritätsprüfung von Transaktionen wurde hinzugefügt.
- Im LSM-Modul Landlock, das die Interaktion einer Gruppe von Prozessen mit der Außenwelt einschränkt, wurde die Möglichkeit hinzugefügt, Regeln zur Einschränkung des Zugriffs auf ioctl()-Aufrufe anzuwenden.
- Eine beim Booten einstellbare Option init_mlocked_on_free wurde vorgeschlagen, die sicherstellt, dass der Inhalt des Speichers, der durch den Aufruf von mlock() vor dem Auslagern geschützt ist, auf null gesetzt wird, wenn dieser Speicher ohne Aufhebung der Sperre durch einen Aufruf von munlock() freigegeben wird. Die Verwendung dieser Option ermöglicht es, das Ansiedeln kryptografischer Schlüssel im Speicher im Falle eines unerwarteten Programmabbruchs zu vermeiden.
- Im Krypto-System wurde die Ausführung von Festplattenschlüsseloperationen mit dem Algorithmus AES-XTS auf x86_64-Systemen mit Intel- und AMD-Prozessoren, die VAES-, AVX2-, VPCLMULQDQ-, AVX10- oder AVX512-Erweiterungen unterstützen, beschleunigt.
- Die Möglichkeit zur Sammlung von Statistiken über die Nutzung des Krypto-Subsystems des Kernels (CONFIG_CRYPTO_STATS) wurde entfernt. Diese Funktion wurde in der Praxis nicht verwendet und führte zu erheblichen Leistungsproblemen sowie zu einer merklichen zusätzlichen Belastung für die Wartenden.
- Netzwerksubsystem
- Die Leistung von Datenübertragungsoperationen im Zero-Copy-Modus mit dem io_uring-Subsystem wurde erheblich verbessert. Es wurde die Möglichkeit hinzugefügt, mehrere Buffer für Sende- und Empfangsoperationen zu bündeln.
- Der Garbage-Collection-Code, der beim Senden von Dateideskriptoren über Unix-Sockets unter Verwendung von SCM_RIGHTS-Nachrichten verwendet wird, wurde neu geschrieben. Diese Änderung löst das Problem mit der Ansammlung zyklischer Referenzzähler.
- Die Möglichkeit zur Festlegung von Filtern für das PFCP-Protokoll (Packet Forwarding Control Protocol), das in 4G- und 5G-Netzen verwendet wird, wurde hinzugefügt.
- Die Unterstützung für die Option für Netzwerksockets SO_PEEK_OFF wurde hinzugefügt. Diese ermöglicht es, das Offset von Daten in der Warteschlange zu bestimmen, das beim Systemaufruf recv mit dem FLAG MSG_PEEK verwendet wird (dies markiert die Daten als ungelesen, sodass sie bei der nächsten recv-Aufforderung erneut bereitgestellt werden).
- Im io_uring-Subsystem wurde die Unterstützung für die Operation IORING_CQE_F_SOCK_NONEMPTY hinzugefügt, die es ermöglicht, den Status eines Netzwerksockets bezüglich ausstehender Verbindungsanfragen zu bestimmen.
- Eine Implementierung der PoE (Power over Ethernet) Technologie wurde vorgeschlagen, die auf zuvor verfügbarem Code zur Unterstützung von PoDL (Power over Data Line) basiert und mit den PoE-Controllern Microchip PD692x0 und TI TPS23881 kompatibel ist.
- Für die Protokolle TCP, DCCP und MPTC wurde die Unterstützung für den Mechanismus rstreason hinzugefügt, der die Ursache für das Senden von RST-Paketen bestimmt (z. B. NO_SOCKET).
- Ausrüstung
- Der Treiber panthor für die zehnte Generation der Mali-GPUs (G310, G510, G710) ist integriert. Er nutzt die CSF-Technologie (Command Stream Frontend), um bestimmte Funktionen des Treibers auszulagern, wodurch die CPU-Last reduziert wird. Zudem wird ein neues Modell zur Organisation der GPU-Arbeitslasten angeboten. Änderungen zur Unterstützung des neuen Treibers wurden auch in Mesa vorgenommen und sind im Gallium-Treiber panfrost für Mali-GPUs enthalten.
- Im i915-Treiber wurden PCI-Identifikatoren für neue diskrete Intel Arc-Grafikkarten (DG2/Alchemist) hinzugefügt.
- Die Arbeit am drm-Treiber (Direct Rendering Manager) Xe für GPUs basierend auf der Intel Xe-Architektur, die in den Intel Arc-Grafikkarten und der integrierten Grafik ab den Tiger Lake-Prozessoren verwendet wird, wird fortgesetzt. Unterstützung für CPU Arrow Lake H wurde hinzugefügt. Die Implementierung der Unterstützung für Lunar Lake-Prozessoren wird fortgeführt. Erste Unterstützung für den SR-IOV-Mechanismus (Single Root I/O Virtualization) wurde implementiert.
- Im AMDGPU-Treiber wurde die Unterstützung für SMU 14.0 (System Management Unit) hinzugefügt. Es wurde die Möglichkeit implementiert, neue AMD-GPUs auf RISC-V-Architektursystemen zu nutzen.
- Ein Treiber für den Tegra Security Engine-Kryptografie-Beschleuniger wurde hinzugefügt, der zur Beschleunigung von AES und verschiedenen Hash-Algorithmen verwendet werden kann.
- Unterstützung für die Bildschirmmodelle LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380, BOE NT116WHM-N44, CMN N116BCA-EA1 und AUO B120XAN01.0 hinzugefügt.
- Unterstützung für die Audiolösungen der Lenovo Thinkbook-Modelle 13x Gen 4, 16P Gen 5, 13X und ASUS Zenbook 2024 HN7306W hinzugefügt. Unterstützung für die externen Soundkarten Vocaster One und Vocaster Two hinzugefügt. Treiber für die NAU8325 Verstärker von Nuvoton Technology hinzugefügt.
- Im HID-Steam-Treiber wurde die Unterstützung für die IMU (Inertial Measurement Unit) des Steam Deck Controllers hinzugefügt, die es ermöglicht, einen separaten evdev-Knoten für den Zugriff auf die Daten des Gyroskops und des Beschleunigungssensors zu verwenden.
- Änderungen zur Unterstützung des ARM SoC Snapdragon X Elite implementiert, der über die eigene 12-Kern-CPU Qualcomm Oryon und GPU Qualcomm Adreno verfügt. Der Chip zielt auf den Einsatz in Laptops und PCs ab und übertrifft in vielen Leistungstests die Apple M3- und Intel Core Ultra 155H-Chips.
- Unterstützung für ARM-Plattformen, SoCs und Geräte hinzugefügt: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
- Unterstützung für die Milk-V Mars-Platine hinzugefügt, die SoC Starfive JH7110 auf Basis der RISC-V-Architektur verwendet.
Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 6.10 – Linux-libre 6.10-gnu – erstellt, die von Firmware- und Treiberelementen befreit ist, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der Version 6.10 wurde der Code zur Bereinigung von Blobs in den Treibern Intel i915, rtl8xxxu, qla2xxx und QCAI sahara aktualisiert. Die Bereinigung von Blob-Namen in den dts-Dateien (Device Tree) für die Architektur Aarch64 wurde durchgeführt. Neue Dateien, die in den Treibern Adreno, Intel IPU3 und PRUEth hinzugefügt wurden, wurden von Blobs bereinigt. Die Bereinigung neuer Treiber wie Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID und pcm6240 wurde ebenfalls durchgeführt. Die Bereinigung des USB-Treibers Prism2.5/3 USB, der aus dem Kernel entfernt wurde, wurde eingestellt.
Quelle: opennet.ru
