Nach zwei Monaten Entwicklungszeit stellte Linus Torvalds das Release des Linux-Kernels 6.10 vor. Zu den bemerkenswertesten Änderungen gehören: der ntsync-Treiber mit Synchronisationsprimitive für Windows NT, die DRM-Panic-Komponenten zur Implementierung eines Äquivalents zum „blauen Bildschirm des Todes“, die Einstellung der Unterstützung für alte Alpha-CPUs, die Möglichkeit zur Integritätsüberprüfung im FUSE-basierten Dateisystem, der Zugangsbeschränkungsmechanismus ioctl über Landlock, eine Subsystem zur Profilerstellung von Speicherzuweisungsoperationen, der Systemaufruf mseal(), die Möglichkeit des verschlüsselten Datenaustauschs mit TPM-Geräten, Unterstützung für hochpriorisierte Warteschlangen in dm-crypt sowie der panthor-Treiber für die zehnte Generation der Mali-GPUs.
In die neue Version wurden 14564 Änderungen von 1989 Entwicklern integriert, die Patchgröße beträgt 41 MB (das Update betraf 12509 Dateien, 547663 Zeilen Code wurden hinzugefügt, 312464 Zeilen wurden entfernt). In der vorherigen Version gab es 15680 Änderungen von 2106 Entwicklern, die Patchgröße war 54 MB. Etwa 41 % aller in 6.10 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 15 % der Änderungen beziehen sich auf die Aktualisierung von architekturspezifischem Code, 13 % sind mit dem Netzwerk-Stack verbunden, 5 % betreffen Dateisysteme und 4 % sind interne Subsysteme des Kernels.
Die wichtigsten 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() angeboten werden, führt F_DUPFD_QUERY nicht zur Offenlegung von zusätzlichen Informationen und funktioniert auf Systemen, auf denen kcmp() deaktiviert ist.
- Im FUSE-Subsystem, das zur 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 zur Verschlüsselung von Blockgeräten verwendet wird, wurde die Option „high_priority“ hinzugefügt, die die Verwendung von hochpriorisierten Warteschlangen zur Leistungssteigerung auf leistungsstarken Systemen ermöglicht. ServernStandardmäßig ist der Modus deaktiviert, da er auf normalen PCs zu erhöhten Verzögerungen bei Arbeiten führen kann, die nicht mit der Verschlüsselung verbunden sind, wie z.B. der Audiobearbeitung.
- Ein auf netlink basierendes Protokoll zur Verwaltung des NFS-Servers im Kern wurde hinzugefügt. Im Benutzerspeicher wurde ein Dienstprogramm nfsdctl auf der Grundlage dieses Protokolls vorbereitet. Die Unterstützung für die Montage von NFS v2 ist standardmäßig deaktiviert (die Unterstützung für NFS v2 in der Utility mount.nfs wurde bereits 2021 eingestellt).
- In dem XFS-Dateisystem wurde die Arbeit an der Implementierung der Möglichkeit fortgesetzt, das Dienstprogramm fsck zur Überprüfung und Behebung von Problemen im Online-Modus, ohne das Dateisystem unmounten zu müssen, zu verwenden. Das ioctl XFS_IOC_EXCHANGE_RANGE wurde hinzugefügt, um byteweise Bereiche zwischen zwei Dateien im atomaren Modus auszutauschen.
- In Btrfs wurde die Unterstützung für das Schrumpfen (shrinker) ungebundener Extent-Karten implementiert, was sich als nützlich erweisen kann, um den Speicherverbrauch unter Bedingungen mit speicherknappen Systemen zu reduzieren. Der Code für die Datenkompression und die Funktion put_file_data() wurden auf die Verwendung von Seitenfolios (page folios) umgestellt. Der Mechanismus zur Sperrung von Extents bei der Durchführung von Rückschreiboperationen wurde überarbeitet.
- Im Ext4-Dateisystem wurde die Unterstützung für ioctl FS_IOC_GETFSSYSFSPATH hinzugefügt, um den Standort eines bestimmten montierten Dateisystems in der Hierarchie /sys/fs zu bestimmen.
- Die Dateisysteme OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX und FREEVXFS wurden auf die Verwendung der neuen API zum Mounten von Partitionen umgestellt.
- Im EROFS-Dateisystem (Extendable Read-Only File System), das für die Verwendung auf schreibgeschützten Partitionen gedacht ist, wurde die Unterstützung für den Kompressionsalgorithmus Zstandard hinzugefügt.
- In Bcachefs wurde die Vorbereitung für die Ausführung von fsck ohne das Unmounten der Partition (Online-Überprüfung) abgeschlossen. Änderungen und Korrekturen wurden hinzugefügt, um die Zuverlässigkeit zu erhöhen. Es wurde die Möglichkeit implementiert, das Format des Dateisystems im „nochanges“-Modus zu aktualisieren und zurückzurollen, der das Schreiben deaktiviert und Metadaten nur im Speicher speichert.
- Im OverlayFS-Dateisystem wurde die Unterstützung für die Erstellung temporärer Dateien mit der Option O_TMPFILE hinzugefügt.
- Die Unterstützung für den Mechanismus zur Beschränkung der Bandbreite von Blockgeräten „CONFIG_BLK_DEV_THROTTLING_LOW“ wurde eingestellt, der seit 2017 den Status experimentell beibehält, in der Praxis nicht verbreitet wurde und die Wartung des Blockgerätesubsystems erschwert.
- Speicher und Systemdienste
- Hinzugefügt, aber bei der Erstellung deaktiviert, ist der ntsync-Treiber, der ein symbolisches Gerät \/dev\/ntsync und eine Reihe von Synchronisationsprimitive implementiert, 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 mit Wine ausgeführt werden. Die Leistungssteigerung wird durch den Verzicht auf die mit RPC im Benutzerspeicher verbundenen Overheads erreicht. Die Schaffung eines separaten Treibers für den Linux-Kernel erklärt sich aus der Problematik einer korrekten Implementierung der NT-Synchronisations-API über die vorhandenen Primitiven im Kernel.
- Ein Subsystem für das Profiling von Speicherzuweisungsoperationen im Linux-Kernel wurde hinzugefügt, das es ermöglicht, Speicherlecks im Kernel zu identifizieren und die Optimierung des Speicherverbrauchs zu erleichtern. Das Subsystem gewährleistet geringe Overheads, sodass es nicht nur in Debug-Builds des Kernels, sondern auch auf Produktionssystemen eingesetzt werden kann.
- Eine erste Implementierung eines Notfallhandlers im Kernel wurde hinzugefügt – DRM Panic, der das DRM (Direct Rendering Manager)-Subsystem verwendet, um einen anschaulichen farbigen Bericht im Stil eines "blauen Bildschirm Todes" anzuzeigen. In der nächsten Version ist geplant, die Möglichkeit hinzuzufügen, ein Logo und einen QR-Code auf dem Bildschirm anzuzeigen, wenn ein Notfallzustand auftritt.
- Der Transfer von Änderungen aus dem Rust-for-Linux-Zweig, die die Verwendung der Programmiersprache Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen betreffen, wurde fortgesetzt (die Rust-Unterstützung ist standardmäßig nicht aktiviert und führt nicht zur Einbeziehung von Rust in die Liste der erforderlichen Build-Abhängigkeiten des Kernels). Ein Wechsel zur Verwendung von Rust 1.78 wurde vollzogen, der es ermöglichte, die Standardbibliothek alloc anstelle eines eigenen Branches zu verwenden. Es wurden Abstraktionen zur Arbeit mit der Zeit im Kernel hinzugefügt (ein Wrapper über die Struktur ktime_t). Unterstützung für die Verwendung von Kernelkomponenten in Rust auf Systemen mit RISC-V-Architektur wurde hinzugefügt.
- In BPF-Programmen wurde die Möglichkeit zur Verwendung von Wartewarteschlangen (wait queue) im Kernel implementiert. Funktionen wie bpf_preempt_disable und bpf_preempt_enable wurden hinzugefügt, die es ermöglichen, unterbrechungsfreie Abschnitte im Code zu erstellen. Es wurde eine Möglichkeit geschaffen, dass BPF-Programme auf die kryptografischen Funktionen des Kernels (crypto) zugreifen können. Die Unterstützung für die JIT-Kompilierung von BPF-Programmen auf 32-Bit-Prozessoren ARCv2 wurde umgesetzt.
- Für 32-Bit-ARM-Systeme wurde die Unterstützung für den Kernel-Build mit dem Clang-Compiler im CFI-Schutzmodus (Control Flow Integrity) implementiert, der Verstöße gegen die normale Ausführungsreihenfolge (control flow) durch Exploits, die gespeicherte Funktionenzeiger im Speicher verändern, blockiert.
- Die Möglichkeit zur direkten Spiegelung von Ringpuffern über mmap() wurde hinzugefügt, um deren Inhalt ohne zusätzliche Kopie in den Benutzerspeicher zu übertragen.
- Ein systemaufruf "mseal" wurde hinzugefügt, der es Prozessen ermöglicht, eine Sperre für Änderungen an bestimmten Teilen ihres Adressraums zu setzen. In der Praxis wird dieser neue Systemaufruf im Chrome-Browser zur Verbesserung der Sandbox-Isolation eingesetzt.
- Für die Subarchitektur x32, die ein hybrides x86_64 ABI bereitstellt, das 32-Bit-Speicheradressierungsmodelle auf 64-Bit-Systemen ermöglicht (der Prozessor arbeitet im 64-Bit-Modus, verwendet jedoch 32-Bit-Zeiger und arithmetische Operationen), wurde die Unterstützung für den Shadow Stack-Mechanismus hinzugefügt, der viele Exploits blockieren kann, indem er die Hardwarefunktionen von Intel-Prozessoren zum Schutz gegen die Überschreibung der Rücksprungadresse aus einer Funktion im Fall eines Stack-Pufferüberlaufs nutzt.
- In Systemaufrufen userfaultfd() auf ARM64-Systemen, die das Erstellen von Handlern für nicht zugewiesene Seitenfehler (page faults) im Benutzerspeicher ermöglichen, wurden Funktionen zum Schutz vor Schreibzugriffen auf Speicherbereiche und Elemente der Speichertabelle implementiert.
- Der Code zur Unterstützung der seit 1995 ausgelieferten Alpha 21164 (EV5) Prozessoren und frühere Serien wurde entfernt. Die Wartung des Codes für diese Prozessoren wurde durch die mangelnde Möglichkeit des Zugriffs auf den Arbeitsspeicher auf der Ebene einzelner Bytes erschwert. 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 Überprüfung der Integrität von Transaktionen wurde hinzugefügt.
- Im LSM-Modul Landlock, das die Interaktion einer Prozessgruppe mit der externen Umgebung einschränkt, wurde die Möglichkeit zur Anwendung von Regeln zum Einschränken des Zugriffs auf ioctl()-Aufrufe hinzugefügt.
- Eine Option init_mlocked_on_free, die beim Booten festgelegt werden kann, sorgt dafür, dass der Inhalt von speicherplatzgeschütztem Speicher, der durch den Aufruf mlock() vor dem Auslagern in den Swap-Bereich geschützt wird, beim Freigeben des Speichers ohne das Entsperren durch den Aufruf munlock() gelöscht wird. Die Verwendung dieser Option vermeidet das Verbleiben kryptografischer Schlüssel im Speicher im Falle eines unerwarteten Beendigens der Anwendungen, die mit diesen Schlüsseln arbeiten.
- In der Krypto-Subsysteme wurde die Ausführung von Festplattenschlüsseloperationen mit dem AES-XTS-Algorithmus auf x86_64-Systemen mit Intel- und AMD-Prozessoren, die die VAES-, AVX2-, VPCLMULQDQ-, AVX10- oder AVX512-Erweiterungen unterstützen, beschleunigt.
- Die Möglichkeit zur Erfassung von Statistiken über die Nutzung des Krypto-Subsystems des Kernels (CONFIG_CRYPTO_STATS) wurde entfernt. Diese Funktion wurde in der Praxis nicht genutzt und führte zu erheblichen Leistungseinbußen sowie einer spürbaren zusätzlichen Belastung für die Wartenden.
- Netzwerksubsystem
- Die Leistung der Datenübertragung im Zero-Copy-Modus bei Verwendung des io_uring-Subsystems wurde erheblich verbessert. Es wurde die Möglichkeit hinzugefügt, mehrere Puffer für die Übertragungs- und Empfangsoperatoren zu bündeln.
- Der Garbage-Collection-Code, der beim Senden von Dateideskriptoren über Unix-Sockets unter Verwendung von SCM_RIGHTS-Nachrichten verwendet wird, wurde überarbeitet. Diese Änderung behebt das Problem des Anhäufens von zirkulären Referenzzählungen.
- Die Möglichkeit zur Einrichtung 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 Netzwerk-Sockets SO_PEEK_OFF wurde hinzugefügt, die analog zur gleichen Option für Unix-Sockets das Offset der Daten in der Warteschlange definieren kann, das beim Systemaufruf recv mit dem Flag MSG_PEEK angegeben wird (markiert die Daten als ungelesen, sodass sie beim nächsten Aufruf von recv erneut ausgegeben werden).
- Im Unterssystem io_uring wurde die Unterstützung für die Operation IORING_CQE_F_SOCK_NONEMPTY hinzugefügt, die es ermöglicht, die Anwesenheit von Anfragen an einen Netzwerk-Socket zu bestimmen, die auf Verarbeitung warten.
- Eine Implementierung der PoE-Technologie (Power over Ethernet) 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 es ermöglicht, den Grund für das Senden von RST-Paketen (zum Beispiel NO_SOCKET) zu bestimmen.
- Ausrüstung
- Der Treiber panthor für die zehnte Generation der GPU Mali (G310, G510, G710) wurde aufgenommen, in dem die CSF-Technologie (Command Stream Frontend) verwendet wird, die einige Funktionen des Treibers auf die Firmware auslagert, um die CPU-Belastung zu verringern, und ein neues Modell zur Durchführung von Arbeiten auf der GPU bietet. Änderungen zur Unterstützung des neuen Treibers wurden ebenfalls in Mesa angenommen und in den Gallium-Treiber panfrost für GPUs der Mali-Serie aufgenommen.
- Dem treiber i915 wurden PCI-Identifikatoren neuer diskreter Intel Arc Grafikkarten (DG2/Alchemist) hinzugefügt.
- Die Arbeit am drm-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe Architektur, die in den Intel Arc Grafikkarten und der integrierten Grafik von Prozessoren der Tiger Lake-Serie verwendet wird, wurde fortgesetzt. Unterstützung für den CPU Arrow Lake H wurde hinzugefügt. Die Implementierung der Unterstützung für die Prozessoren Lunar Lake wurde fortgesetzt. Die anfängliche Unterstützung für den Mechanismus SR-IOV (Single Root I/O Virtualization) wurde hinzugefügt.
- Im Treiber AMDGPU wurde die Unterstützung für SMU 14.0 (System Management Unit) hinzugefügt. Die Nutzung neuer AMD-GPUs in RISC-V-Architekturen wurde ermöglicht.
- Ein Treiber für den Tegra Security Engine Krypto-Beschleuniger wurde hinzugefügt, der zur Beschleunigung von AES und verschiedenen Hash-Algorithmen verwendet werden kann.
- Die Unterstützung für die Display-Panels 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 wurde hinzugefügt.
- Unterstützung für die Audiokomponente der Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 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 Verstärker NAU8325 von Nuvoton Technology hinzugefügt.
- Im HID-Steam-Treiber wurde die Unterstützung für die IMU (Inertial Measurement Unit) des Steam Deck-Spielecontrollers hinzugefügt, die den Zugriff auf Gyroskop- und Beschleunigungsdaten über ein separates evdev-Modul ermöglicht.
- Änderungen zur Unterstützung des ARM SoC Snapdragon X Elite, das über eine eigene 12-Kern-CPU Qualcomm Oryon und GPU Qualcomm Adreno verfügt, wurden aktiviert. Der Chip zielt auf den Einsatz in Laptops und PCs ab und übertrifft in vielen Leistungstests die Chips Apple M3 und Intel Core Ultra 155H.
- 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-Platten, die das SoC Starfive JH7110 auf Basis der RISC-V-Architektur nutzen, hinzugefügt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation eine vollständig freie Version des Kerns 6.10 - Linux-libre 6.10-gnu - erstellt, bereinigt von Elementen der Firmware und Treiber, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In Version 6.10 wurde der Bereinigungscode für Blobs in den Intel i915-, rtl8xxxu-, qla2xxx- und QCAI sahara-Treibern aktualisiert. Die Bereinigung der Blob-Namen in den dts-Dateien (Device Tree) für die Aarch64-Architektur wurde durchgeführt. Neue, in den Adreno-, Intel IPU3- und PRUEth-Treibern hinzugefügte Dateien wurden von Blobs gereinigt. Reinigung neuer Treiber wie Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID und pcm6240 wurde vorgenommen. Die Bereinigung des USB-Treibers Prism2.5/3 USB, der aus dem Kernel entfernt wurde, wurde eingestellt.
Quelle: opennet.ru
