Die Freigabe des Linux-Kernels 6.6

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds das Release des Linux-Kernels 6.6. Zu den auffälligsten Änderungen gehören: der neue Aufgabenplaner EEVDF; ein Schatten-Stack-Mechanismus zum Schutz vor Exploits; die Unterstützung von fs-verity in OverlayFS; die Implementierung von Quotas und xattr in tmpfs; die Vorbereitung von online fsck in XFS; eine verstärkte Überwachung für das Exportieren von „GPL-only“-Symbolen; die Unterstützung von Netzwerksockets in io_uring; die Randomisierung des Speichers in kmalloc(); ReiserFS wurde als veraltet erklärt; im Nouveau wurden primitive Funktionen für den Vulkan-Treiber NVK hinzugefügt.

In die neue Version wurden 15.291 Änderungen von 2.058 Entwicklern aufgenommen, die Patchgröße beträgt 39 MB (die Änderungen betrafen 14.844 Dateien, 553.359 Zeilen Code wurden hinzugefügt und 284.012 Zeilen entfernt). Im letzten Release gab es 14.674 Änderungen von 2.016 Entwicklern, die Patchgröße betrug 78 MB. Etwa 44 % aller in 6.6 vorgestellten Änderungen beziehen sich auf Gerätetreiber, ungefähr 17 % der Änderungen betreffen die Aktualisierung architekturspezifischen Codes, 11 % stehen im Zusammenhang mit dem Netzwerk-Stack, 4 % mit Dateisystemen und 3 % mit internen Kernsubsystemen.

Die Hauptneuheiten im Kernel 6.6:

  • Speicher und Systemdienste
    • Ein neuer Task-Scheduler EEVDF (Earliest Eligible Virtual Deadline First) wurde implementiert, der den CFS (Completely Fair Scheduler) ersetzt, der seit dem Kernel 2.6.23 verwendet wurde. Der neue Scheduler berücksichtigt bei der Auswahl des nächsten Prozesses zur Ausführung die Prozesse, die nicht genügend CPU-Ressourcen erhalten haben oder zu viel CPU-Zeit erhalten haben. Im ersten Fall wird die Kontrolle an den Prozess übertragen, im zweiten Fall hingegen verzögert. Der alte CFS-Scheduler verwendete Heuristiken und Feinabstimmungen, um Prozesse zu identifizieren, die besondere Aufmerksamkeit benötigten, während der neue Scheduler diese explizit nachverfolgt und keine Feinabstimmung erfordert. Es wird erwartet, dass EEVDF die Latenzzeiten bei der Ausführung von Aufgaben reduziert, bei denen CFS Probleme mit der Planung hatte.
    • Es wurden Änderungen an der Verarbeitung interner Symbole der Kategorie "GPL-only" vorgenommen, um es proprietären Modulen zu erschweren, GPL-Wrapper zu verwenden, um die Zugangsrestriktionen zu Kernsubsystemen zu umgehen, die nur Code unter der GPL-Lizenz zulassen. In der Funktion symbol_get() ist die Suche nach als GPL-only gekennzeichneten Symbolen für proprietäre Module verboten, und umgekehrt können GPL-Module keine von proprietären Modulen exportierten Symbole finden.
    • Zusätzliche Einstellungen für Arbeitswarteschlangen (unbound workqueue) wurden hinzugefügt, um die Effizienz der Wiederverwendung des ProzessorkCaches in großen Systemen mit mehreren Level-3-Caches (L3) zu erhöhen. Im Kernel wurde außerdem das Tool tools/workqueue/wq_dump.py aufgenommen, um die aktuelle Konfiguration der Arbeitswarteschlangen zu überprüfen.
    • Im io_uring-Subsystem wurde eine initiale Unterstützung für netzwerksocket-spezifische Operationen und Befehle hinzugefügt. Es wurde ein sysctl io_uring_disabled hinzugefügt, um io_uring systemweit zu deaktivieren. Außerdem wurde der direkte Input/Output (Direct I/O) im asynchronen Modus in io_uring erheblich beschleunigt. Der Anstieg der Durchsatzrate und die Verringerung der Latenzzeiten bei der Durchführung von I/O-Operationen nach den Änderungen erreichen 37%.
    • Für die PA-RISC-Architektur wurde ein JIT-Compiler für BPF implementiert.
    • In die Einstellung /sys/devices/system/cpu/smt/control wurde die Unterstützung numerischer Parameter hinzugefügt, die die Anzahl der für jeden CPU-Kern verfügbaren Threads definieren (zuvor wurden nur die Werte „on“ und „off“ zur Aktivierung und Deaktivierung der Unterstützung für symmetrisches Multithreading unterstützt). Diese neue Funktion kann auf einigen PowerPC-Prozessoren angewendet werden, die den Hotplug-Modus für symmetrisches Multithreading unterstützen, um SMT auf bestimmten Kernen im laufenden Betrieb selektiv zu aktivieren.
    • Die Übertragung der Änderungen aus dem Rust-for-Linux-Branch wurde fortgesetzt, die sich auf die Verwendung von Rust als zweite Sprache für die Entwicklung von Treibern und Kernel-Modulen beziehen (die Unterstützung für Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels zählt). Es wurde auf die Versionen Rust 1.71.1 und bindgen 0.65.1 umgestellt. Der Trait ‚Zeroable‘ wurde implementiert. Die prozeduralen Makros ‚paste!‘ und ‚#[derive(Zeroable)]‘ wurden hinzugefügt. Die Kompatibilität mit ‚#[pin_data]‘ wurde sichergestellt. Funktionen zur Initialisierung ‚{,pin_}init_array_from_fn()‘ und die Methode ‚{,pin_}chain‘ wurden hinzugefügt. Die Möglichkeiten des Moduls ‚types‘ wurden erweitert. Im Framework für Unit-Tests, kunit, wurde die Möglichkeit ergänzt, Tests aus der Rust-Dokumentation auszuführen.
    • Ein neues Subsystem ‚eventfs‘ wurde hinzugefügt, das den Speicherverbrauch im Trace-System erheblich reduziert, indem unnötige Strukturen entfernt werden, die zur Darstellung von Tracepoints im Dateisystem verwendet werden. Zuvor wurden solche Strukturen für alle Tracepoints erstellt, unabhängig davon, ob die Tracefunktion genutzt wurde. Mit eventfs können solche Strukturen dynamisch nur bei Bedarf erstellt werden.
    • Die Möglichkeiten des Tools perf wurden erweitert.
    • Im Datei /proc/pid/smaps wurde Informationen zur Diagnose der Effizienz des Mechanismus zum Zusammenführen identischer Speicherseiten (KSM, Kernel Samepage Merging) hinzugefügt.
    • Die API Frontswap wurde entfernt, die es ermöglichte, eine Auslagerungsdatei im nicht direkt adressierbaren Speicher zu platzieren, der keine aktuellen Informationen über verfügbaren Platz bereitstellt. Diese API wurde nur in zswap verwendet, daher entschieden wir uns, diese Funktionalität direkt in zswap zu nutzen und überflüssige Schichten zu beseitigen.
    • Für die RISC-V-Architektur wurde die Unterstützung für den Zugriff auf Leistungszähler aus dem Benutzerspeicher und die Möglichkeit hinzugefügt, einen Kernel-Dump nach einem Absturz außerhalb des 4-GB-Bereichs zu platzieren.
    • Es wurde eine anfängliche Unterstützung für ARM SME (Scalable Matrix Extension)-Befehle hinzugefügt.
    • Die Nutzung von Debugging-Tools wie KDB, KGDB, kcov, KFENCE und KASAN auf Systemen mit LoongArch-Architektur wurde ermöglicht.
    • Die Unterstützung für Testdateien im Kernel der kontinuierlichen Integrationssysteme GitLab wurde eingeführt, die bei der Entwicklung von Grafiktreibern verwendet wird.
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Das OverlayFS-Dateisystem unterstützt jetzt die Speicherung von fs-verity-Hashes im erweiterten Attribut (xattr) overlay.verity. Dies kann zur Überprüfung der Integrität und Authentizität von Dateien in den unteren Schichten von OverlayFS mithilfe von kryptografischen Hashes und Schlüsseln verwendet werden. Damit enthält OverlayFS nun alle Änderungen, die für das Composefs-Projekt erforderlich sind, um als Erweiterung über das OverlayFS- und EROFS-Dateisystem zu arbeiten.
    • Im XFS-Dateisystem wurde die Vorbereitung zur Implementierung der Möglichkeit zur Anwendung des fsck-Tools zur Überprüfung und Behebung festgestellter Probleme im Online-Modus, ohne das Dateisystem aushängen zu müssen, abgeschlossen. Außerdem wurde in XFS die Nutzung großer Blätter (folios) im Seiten-Cache sowie einige damit verbundene Optimierungen eingeführt, die die Leistung bei bestimmten Lastarten merklich steigern konnten.
    • Im tmpfs-Dateisystem wurde die Unterstützung für benutzerdefinierte erweiterte Attribute (user xattrs), direkten Zugriff/Ein- und Ausgabe sowie benutzer- und gruppenbezogene Quoten hinzugefügt. Die Verzeichnisschiebungen wurden stabilisiert, wodurch Probleme mit dem Export von tmpfs über NFS gelöst wurden.
    • Im Mount-Management-API wurde das Flag FSCONFIG_CMD_CREATE_EXCL hinzugefügt, das die gemeinsame Nutzung des Superblocks an mehreren Einhängepunkten verbietet (verhindert das Anbringen einer Partition an mehreren Einhängepunkten). In der Mount-Utility wurde die Option "--exclusive" zur Aktivierung dieses Flags angeboten.
    • Im VFS-Subsystem wurde die Unterstützung für die dynamische Änderung der Zugriffs- und Änderungszeiten (atime, mtime) hinzugefügt. Zuvor wurden die Zeitdaten mit einer gewissen Verzögerung reflektiert, was die Aktualität der Daten im Cache in Systemen wie NFS beeinträchtigte (aufgrund der Verzögerung bei der Erkennung von Änderungen in der Datei konnte das System fälschlicherweise annehmen, dass die Daten im Cache aktuell waren). Diese neue Funktion ist für Btrfs, Ext4, tmpfs und XFS verfügbar.
    • Das integrierte Integritätsprüfungsmechanismus, das in Btrfs über den Parameter BTRFS_FS_CHECK_INTEGRITY beim Erstellen aktiviert wird, wurde als veraltet erklärt. Dieser Mechanismus wird nicht mehr unterstützt, nicht mehr getestet und stellt eine zusätzliche Belastung für CPU und Speicher dar. Darüber hinaus wurde der neue Code für die FS-Überprüfung (scrub) in Btrfs optimiert.
    • Im Ext4-Dateisystem wurden regelmäßige Überprüfungen der Superblock-Aktualisierung hinzugefügt und die Speicherzuweisungen beim Anhängen an das Dateiende beschleunigt.
    • Im FUSE-Subsystem wurde die Unterstützung des Attributs btime („Geburtszeit“) hinzugefügt, das die Erstellungszeit des Inodes definiert.
    • Änderungen der Zugriffsrechte für symbolische Links sind nicht erlaubt.
    • Der Systemaufruf fchmodat2() wurde hinzugefügt, der sich vom Systemaufruf fchmodat() durch ein zusätzliches Argument zur Angabe von Flags unterscheidet. Derzeit werden nur die Flags AT_SYMLINK_NOFOLLOW und AT_EMPTY_PATH unterstützt, die es erlauben, in libc-Funktionen fchmodat() ohne Umwege das Dereferenzieren von symbolischen Links zu verbieten und die Verwendung eines Dateideskripts bei Angabe eines leeren Pfades zu ermöglichen.
    • Im EROFS-Dateisystem (Extendable Read-Only File System), das für die Verwendung auf Partitionen im Nur-Lese-Modus vorgesehen ist, wurde die Unterstützung des Deflate-Kompressionsalgorithmus hinzugefügt. Zur Beschleunigung der Suche nach erweiterten Attributen wurde eine probabilistische Struktur, der Bloom-Filter, verwendet.
    • Die Konfiguration CONFIG_BUFFER_HEAD wurde hinzugefügt, die es ermöglicht, den Kernel ohne die Verwendung der Struktur buffer_head zu erstellen. Bei der Erstellung ohne buffer_head können Blockgeräte und einige Dateisysteme wie xfs, btrfs, cramfs, erofs und squashfs verwendet werden.
    • Der Blockgeräte-Treiber ublk, der es ermöglicht, spezifische Logik in den Benutzerraum zu verlagern, hat Unterstützung für zonierte Speichergeräte hinzugefügt (Unterteilung in Zonen von Blockgruppen oder Sektoren, bei denen nur sequentielle Datenübergaben mit der Aktualisierung der gesamten Blockgruppe zulässig sind).
    • Die Implementierung des Dateisystems ReiserFS wurde von der Kategorie unterstützt in die Kategorie obsolet (Obsolete) übertragen. Die Unterstützung von ReiserFS soll 2025 eingestellt werden. Als Grund für die Einstufung von ReiserFS als obsolet wird die Stagnation in der Wartung dieses Dateisystems, das ungelöste Jahr-2038-Problem, das Fehlen von Möglichkeiten zur Gewährleistung der Ausfallsicherheit und der Wunsch, den Wartungsaufwand bei allgemeinen Änderungen der Dateisysteme in Bezug auf die Unterstützung neuer APIs für das Mounten, iomap und Folios zu verringern, angegeben.
    • Im NFS-Server wurde ein Mechanismus zur Delegierung von Schreiboperationen für NFSv4 implementiert, der die Effizienz des Datei-Write-Cachings erhöht, um den Datenverkehr zu reduzieren. Die Unterstützung für die in NFS 4.2 definierte Operation READ_PLUS ist aktiviert.
    • Das Ceph-Dateisystem hat die Unterstützung für fscrypt hinzugefügt.
  • Virtualisierung und Sicherheit
    • Die Implementierung des Mechanismus Shadow Stack wurde hinzugefügt, der die Ausführung vieler Exploits blockieren kann, indem er die Hardwarefähigkeiten von Intel-Prozessoren nutzt, um vor einer Rückkehradresse aus einer Funktion zu schützen, falls ein Buffer Overflow im Stack auftritt. Der Schutz besteht darin, dass nach der Übergabe der Kontrolle an die Funktion die Rückgabeadresse nicht nur im regulären Stack, sondern auch in einem separaten "Shadow Stack" vom Prozessor gespeichert wird, der nicht direkt verändert werden kann. Vor dem Verlassen der Funktion wird die Rückgabeadresse aus dem Shadow Stack extrahiert und mit der Rückgabeadresse aus dem Hauptstack abgeglichen. Eine Nichtübereinstimmung der Adressen führt zur Generierung einer Ausnahme, die Situationen blockiert, in denen es einem Exploit gelungen ist, die Adresse im Hauptstack zu überschreiben. Der Hardware-Shadow Stack wird nur in 64-Bit-Bauten unterstützt, während in 32-Bit-Bauten eine softwarebasierte Emulation verwendet wird.
    • Die Unterstützung für das Kompilieren mit dem Clang-Compiler wurde hinzugefügt, wobei der CFI-Modus (Control Flow Integrity) aktiviert ist, der Verstöße gegen die normale Ausführungsreihenfolge (control flow) verhindert, die durch Exploits verursacht werden, die die in den Speicher eingelagerten Funktionszeiger verändern.
    • Für die RISC-V-Architektur wurde die Adressrandomisierung des Kernels beim Booten aktiviert.
    • Der Systemaufruf seccomp() erhielt das Flag SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, das die Verarbeitung von Ereignissen aus überwachten Prozessen im synchronen Modus ermöglicht, um die Effizienz des Taskplaners zu verbessern.
    • In der Funktion kmalloc() wurde die Randomisierung der Slab-Caches implementiert, die die Ausnutzung von Schwächen im Kernel erschwert.
    • In Bezug auf die Aktivierung des SELinux-Zugriffskontrollsystems wurde das Erwähnen der National Security Agency (NSA) entfernt. Da das Projekt seit 20 Jahren unter der Leitung der Community entwickelt wird und von unabhängigen Maintainer:innen unterstützt wird, wurde entschieden, den Namen „SELinux“ anstelle von „NSA SELinux“ in Kommentaren und Dokumentationen in Kconfig zu verwenden (z.B. wurde die Erläuterung zur Build-Option SECURITY_SELINUX von „NSA SELinux Support“ auf „SELinux Support“ geändert).
    • Im Systemaufruf userfaultfd() wurde die Operation UFFDIO_POISON hinzugefügt, die es ermöglicht, Speicherseiten als „vergiftet“ (poisoned) zu markieren. Dies kann verwendet werden, um beschädigte Speicherseiten bei der Migration zu übertragen. virtuellen Maschinen von einem System auf ein anderes.
    • Im VFIO-Subsystem wurde eine neue symbolische Schnittstelle (/dev/vfio/devices/vfioX) hinzugefügt, um VFIO-Geräte zu verwalten. Damit kann der Benutzer direkt eine Datei mit dem Gerät öffnen, ohne auf die veraltete Gruppen-Schnittstelle /dev/vfio/$groupID zurückgreifen zu müssen.
    • In Server Die Unterstützung von veralteten Kerberos-Verschlüsselungstypen, die die Algorithmen DES und 3DES verwenden, wurde in NFS eingestellt.
    • Bei der Ausführung in einer Hyper-V-Hypervisor-Umgebung wurde die Unterstützung für Gastbetriebssysteme hinzugefügt, die durch AMD SEV-SNP (Secure Nested Paging) und Intel TDX (Trusted Domain Extensions) geschützt sind.
    • Beim Kompilieren des Kernels im Modus „W=1“ sind im Standardcompiler die Warnungen „-Wformat-overflow“, „-Wformat-truncation“, „-Wstringop-overflow“ und „-Wrestrict“ aktiviert. Für alle Builds ist die Warnung „-Wenum-conversion“ aktiviert.
  • Netzwerksubsystem
    • Die Implementierung der AF_XDP (eXpress Data Path) Adressfamilie wurde um die Möglichkeit erweitert, mit Paketen zu arbeiten, die in mehreren Buffern gespeichert sind (zum Beispiel kann sich im einen Buffer der Paketheader und im anderen die Daten befinden, oder in einer Kette von mehreren Buffern können große Ethernet-Jumbo-Frames untergebracht werden). Programme, die AF_XDP-Sockets verwenden, können jetzt Pakete direkt aus mehreren Buffern empfangen und senden.
    • Das BPF-Subsystem unterstützt jetzt die Defragmentierung von IPv4- und IPv6-Paketen sowie die Möglichkeit, fragmentierte Pakete zu filtern.
    • Ein neuer Handler update_socket_protocol wurde zu BPF hinzugefügt, der es BPF-Programmen ermöglicht, das angeforderte Protokoll für neue Sockets zu ändern. Beispielsweise kann ein BPF-Programm transparent das TCP-Protokoll durch MPTCP (Multipath TCP) ersetzen, um den Datenverkehr einer Anwendung zu optimieren. Das BPF bietet auch Unterstützung für das Routing von Paketen über verschiedene Streams in MPTCP.
    • Das experimentelle Entwicklungsmerkmal wurde von dem ksmbd-Modul entfernt, welches eine funktionierende Implementierung eines Dateiserver auf Kernel-Ebene basierend auf dem SMB3-Protokoll anbietet. Es wurde hinzugefügt, dass Lesevorgänge (Read Compound-Requests) zusammengefasst werden können.
  • Ausrüstung
    • Im DRM-Subsystem (Direct Rendering Manager) wurden Änderungen vorgenommen, die für den effizienten Betrieb des offenen NVK-Treibers mit der Implementierung der Grafik-API Vulkan für NVIDIA-Grafikkarten erforderlich sind. Ursprünglich war der DRM-Treiber Nouveau auf die Implementierung von OpenGL ausgelegt, daher fehlen ihm die Primitiven, die für eine effiziente Funktion der Vulkan-Treiber notwendig sind, wie zum Beispiel die Unterstützung synchronisierter Objekte und die Verwaltung des virtuellen Adressraums.
    • Im AMDGPU-Treiber wurde die Unterstützung für SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 und GFX 9.4.3 implementiert. Der Code zum Laden der Firmware des PSP (Platform Security Processor) wurde überarbeitet. Die Unterstützung für die adaptive Synchronisationstechnologie FreeSync wurde erweitert (Freesync Panel Replay V2-Unterstützung hinzugefügt).
    • Im i915-Treiber wurde die Unterstützung für Intel Meteor Lake-Chips fortgesetzt. Die Unterstützung für die Kopierschutztechnologie HDCP (High-bandwidth Digital Content Protection) wurde verbessert. Der Code für die Interaktion mit dem Display wurde überarbeitet.
    • Im Kconfig wurden die Optionen zum Deaktivieren des Ladens von Mikrocodes während des Builds entfernt — MICROCODE_INTEL und MICROCODE_AMD. Der Kernel wird jetzt immer mit dem Mikrocodeladecode für x86-Systeme erstellt, aber das tatsächliche Laden des Mikrocodes kann durch Angabe des Kernelparameters ‘dis_ucode_ldr’ deaktiviert werden.
    • Im Audiosystem wurde die Möglichkeit hinzugefügt, Audio-Geräte zu steuern, die über das IIO (Industrial I/O) System angeschlossen sind.
    • Unterstützung für die AudiouInterfaces Intel LunarLake, Intel ArrowLake und AMD ACP5x, sowie für die Codec Cirrus Logic CS42L43, Realtek RT1017 und TI TAS2781, sowie für die Verstärker Cirrus Logic CS35L56 und winic aw88261 hinzugefügt. Unterstützung für ASoC AMD Van Gogh wurde ebenfalls hinzugefügt.
    • Ein USB MIDI 2.0 Gadget-Treiber, der die USB MIDI 2.0 Schnittstelle emuliert, die an das ALSA UMP rawmidi Gerät gebunden ist, wurde hinzugefügt.
    • Unterstützung für die Ethernet-Controller Broadcom ASP 2.0 und Marvell 88Q2XXX hinzugefügt.
    • Unterstützung für die Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 und EDT ET028013DMA Panels sowie für die Display-Controller von Loongson und die Touchscreen-Controller Azoteq IQS7222D/IQS7210A/7211A hinzugefügt.
    • Unterstützung für den ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7) hinzugefügt.
    • Unterstützung für ARM-Plattformen wie Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3 und Radxa ROCK 4SE hinzugefügt.

Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 6.6 — Linux-libre 6.6-gnu, erstellt, die von Firmware- und Treiberelementen befreit ist, die nichtfreie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der Version 6.6 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen aktualisiert, zum Beispiel in den Treibern für TI Gigabit RU Ethernet, MediaTek 792x WLAN, Cirrus Logic cs42l43 mfd, cs35l56 HD-Audio und aw88261 SoC. Die Namen der Blobs in den DTS-Dateien für die Architektur Aarch64 wurden bereinigt. Blobs wurden in neuen Treibern für ivpu, in Bluetooth-Treibern, im Treiber für Touchscreens und im Encoder/Decoder Qualcomm Venus V4L2 entfernt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster