Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 6.10. Parmi les changements les plus notables : le pilote ntsync avec des primitives de synchronisation Windows NT, les composants DRM Panic pour la mise en œuvre d'un équivalent de l'« écran bleu de la mort », l'arrêt du support des anciens CPU Alpha, la possibilité de vérifier l'intégrité dans le système de fichiers basé sur FUSE, la restriction d'accès à ioctl via le mécanisme Landlock, un sous-système pour le profilage des opérations d'allocation de mémoire, l'appel système mseal(), la possibilité d'un échange de données cryptées avec des dispositifs TPM, le support des files d'attente de travail hautement prioritaires dans dm-crypt et le pilote panthor pour la dixième génération de GPU Mali.
La nouvelle version comprend 14564 corrections provenant de 1989 développeurs, la taille du patch étant de 41 Mo (les modifications ont touché 12509 fichiers, ajoutant 547663 lignes de code et supprimant 312464 lignes). Dans la précédente version, il y avait 15680 corrections de 2106 développeurs, pour une taille de patch de 54 Mo. Environ 41 % des modifications présentées dans la version 6.10 concernent les pilotes de périphériques, environ 15 % concernent la mise à jour de code spécifique à l'architecture matérielle, 13 % sont liées à la pile réseau, 5 % aux systèmes de fichiers et 4 % aux sous-systèmes internes du noyau.
Les principales nouveautés du noyau 6.10 :
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Une nouvelle opération fcntl F_DUPFD_QUERY a été ajoutée, permettant à un processus de déterminer que deux descripteurs de fichiers différents se réfèrent au même fichier. Contrairement à des fonctionnalités similaires fournies par l'appel système kcmp(), F_DUPFD_QUERY ne divulgue pas d'informations superflues et fonctionne sur des systèmes avec kcmp désactivé.
- Dans le sous-système FUSE, utilisé pour implémenter des systèmes de fichiers en espace utilisateur, la possibilité d'utiliser le mécanisme fs-verity pour vérifier l'intégrité et l'authenticité des fichiers a été mise en œuvre.
- Dans le module dm-crypt, utilisé pour le cryptage des périphériques de blocs, une option « high_priority » a été ajoutée, permettant d'utiliser des files d'attente de travail hautement prioritaires pour améliorer les performances sur des systèmes puissants. serveursPar défaut, le mode est désactivé, car il peut entraîner sur des PC ordinaires une augmentation des latences lors d'exécutions de tâches non liées au cryptage, comme le traitement audio.
- Un protocole basé sur netlink pour la gestion d'un serveur NFS a été ajouté au noyau. Un utilitaire nfsdctl a été développé pour cet espace utilisateur basé sur ce protocole. Le support du montage NFS v2 est désactivé par défaut (dans l'utilitaire mount.nfs, le support de NFS v2 a été arrêté en 2021).
- Le travail sur l'implémentation de la possibilité d'utiliser l'utilitaire fsck pour vérifier et corriger les problèmes détectés en mode en ligne, sans démonter le système de fichiers, se poursuit dans le système de fichiers XFS. L'ioctl XFS_IOC_EXCHANGE_RANGE a été ajouté pour échanger des plages d'octets entre deux fichiers en mode atomique.
- Dans Btrfs, le support de la réduction (shrinker) des cartes d'extents non fixées a été implémenté, ce qui peut être utile pour réduire la consommation de mémoire en cas de pénurie de mémoire dans le système. Le code pour la compression des données et la fonction put_file_data() ont été convertis pour utiliser des folios de pages mémoire. Le mécanisme de verrouillage des extents lors de l'exécution d'opérations d'écriture a été retravaillé.
- Dans le FS Ext4, le support de l'ioctl FS_IOC_GETFSSYSFSPATH a été ajouté pour déterminer l'emplacement d'un FS monté donné dans la hiérarchie /sys/fs.
- Les systèmes de fichiers OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX et FREEVXFS ont été convertis pour utiliser la nouvelle API de montage des partitions.
- Dans le système de fichiers EROFS (Extendable Read-Only File System), destiné à être utilisé sur des partitions accessibles en mode lecture seule, le support de l'algorithme de compression Zstandard a été ajouté.
- Dans Bcachefs, des préparatifs ont été effectués pour exécuter fsck sans démonter la partition (vérification en ligne). Des modifications et des corrections ont été ajoutées pour améliorer la fiabilité du fonctionnement. La possibilité de mettre à jour et de revenir au format FS en mode « nochanges », désactivant l'écriture et stockant les métadonnées uniquement en mémoire, a été implémentée.
- Dans le système de fichiers OverlayFS, le support de la création de fichiers temporaires en utilisant l'option O_TMPFILE a été ajouté.
- Le support du mécanisme de limitation de la bande passante des périphériques de blocs « CONFIG_BLK_DEV_THROTTLING_LOW » a été arrêté, ayant maintenu son statut expérimental depuis 2017, n'ayant pas trouvé d'application pratique et compliquant la maintenance de la sous-système des périphériques de blocs.
- Mémoire et services système
- Ajouté mais désactivé lors de la compilation, le pilote ntsync, qui implémente le dispositif symbolique /dev/ntsync et un ensemble de primitives de synchronisation utilisées dans le noyau Windows NT. La mise en œuvre de telles primitives au niveau du noyau permet d'augmenter considérablement les performances des jeux Windows exécutés via Wine. L'augmentation des performances est obtenue en éliminant les frais généraux liés à l'utilisation de RPC dans l'espace utilisateur. La création d'un pilote distinct pour le noyau Linux s'explique par la problématique de la mise en œuvre correcte de l'API de synchronisation NT sur les primitives existantes dans le noyau.
- Ajouté un sous-système de profilage des opérations d'allocation mémoire dans le noyau Linux, permettant d'identifier les fuites de mémoire dans le noyau et facilitant l'optimisation de la consommation mémoire. Le sous-système assure de faibles frais généraux, ce qui permet de l'utiliser non seulement dans les versions de débogage du noyau, mais aussi sur des systèmes en production.
- Ajoutée une mise en œuvre initiale du gestionnaire d'incidents dans le noyau — DRM Panic, qui utilise le sous-système DRM (Direct Rendering Manager) pour afficher un rapport coloré et visuel de style « écran bleu de la mort ». La prochaine version prévoit d'ajouter la possibilité d'afficher un logo et un QR code sur l'écran lors d'un état d'urgence.
- Poursuite du transfert des changements de la branche Rust-for-Linux, liés à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules noyaux (le support de Rust n'est pas activé par défaut et ne conduit pas à l'inclusion de Rust parmi les dépendances de compilation obligatoires pour le noyau). Migration vers la version Rust 1.78, permettant de passer à l'utilisation de la bibliothèque standard alloc, au lieu d'une branche personnalisée. Ajout d'abstractions pour le travail avec le temps dans le noyau (une enveloppe autour de la structure ktime_t). Ajout du support pour l'utilisation des composants noyaux en Rust sur des systèmes avec architecture RISC-V.
- Les programmes BPF intègrent la possibilité d'utiliser des files d'attente d'attente (wait queue) dans le noyau. Des fonctions bpf_preempt_disable et bpf_preempt_enable ont été ajoutées, permettant de créer des sections de code non interrompues par le planificateur de tâches. L'accès des programmes BPF aux fonctions cryptographiques du noyau (crypto) a été rendu possible. La prise en charge de la compilation JIT des programmes BPF sur les systèmes avec des processeurs 32 bits ARCv2 a été implémentée.
- Pour les systèmes ARM 32 bits, le support de la compilation du noyau par le compilateur Clang avec le mode de protection CFI (Control Flow Integrity) activé a été réalisé, bloquant les violations de l'ordre normal d'exécution (control flow) résultant de l'utilisation d'exploits modifiant les pointeurs de fonction stockés en mémoire.
- La possibilité de refléter directement via mmap() les tampons circulaires de traçage pour transférer leur contenu vers l'espace utilisateur sans copie supplémentaire a été ajoutée.
- Un nouvel appel système, «mseal», a été ajouté, permettant aux processus d'établir une protection contre la modification de certaines parties de leur espace d'adressage. Dans la pratique, ce nouvel appel système est prévu pour être utilisé dans le navigateur Chrome afin de renforcer l'isolation du sandbox.
- Pour la sous-architecture x32, qui fournit un ABI hybride x86_64 permettant d'utiliser un modèle d'adressage mémoire 32 bits sur des systèmes 64 bits (le processeur fonctionne en mode 64 bits, mais utilise des pointeurs 32 bits et des opérations arithmétiques), la prise en charge du mécanisme Shadow Stack a été ajoutée, ce qui permet de bloquer le fonctionnement de nombreux exploits en utilisant les capacités matérielles des processeurs Intel pour protéger contre la réécriture de l'adresse de retour d'une fonction en cas de débordement de mémoire tampon dans la pile.
- Sur les systèmes avec architecture ARM64, l'appel système userfaultfd(), qui permet de créer des gestionnaires d'accès à des pages de mémoire non allouées (page faults) dans l'espace utilisateur, a vu l'implémentation de fonctionnalités liées à la protection contre l'écriture dans des zones mémoire et des entrées de table de pages mémoire.
- Le code pour le support des processeurs Alpha 21164 (EV5) et des séries antérieures, datant de 1995, a été supprimé. Le maintien de ce code a été compliqué par l'absence d'accès à la mémoire au niveau des octets. Alpha a été la première architecture sur laquelle le noyau Linux a été porté, initialement disponible uniquement pour les systèmes x86.
- Virtualisation et sécurité
- Ajout du support d'un échange de données crypté avec des dispositifs TPM (Trusted Platform Module) et vérification de l'intégrité des transactions.
- Dans le module LSM Landlock, permettant de limiter l'interaction d'un groupe de processus avec l'environnement externe, il a été ajouté la possibilité d'appliquer des règles pour restreindre l'accès aux appels ioctl().
- Une option init_mlocked_on_free, qui garantit la mise à zéro du contenu de la mémoire protégée contre l'écriture dans le fichier d'échange via l'appel mlock(), a été proposée au moment du démarrage. Si cette mémoire est libérée sans déverrouillage par l'appel munlock(), son utilisation permet d'éviter que des clés cryptographiques ne soient laissées dans la mémoire en cas de plantage de l'application qui les utilise.
- Dans la sous-système crypto, les opérations de chiffrement de disque utilisant l'algorithme AES-XTS ont été accélérées sur les systèmes x86_64 avec des processeurs Intel et AMD prenant en charge les extensions VAES, AVX2, VPCLMULQDQ, AVX10 ou AVX512.
- La possibilité de collecter des statistiques sur l'utilisation de la sous-système crypto du noyau (CONFIG_CRYPTO_STATS) a été supprimée. Cette fonctionnalité n'était pas utilisée en pratique et entraînait une diminution significative des performances, ainsi qu'une charge supplémentaire pour les mainteneurs.
- Sous-système réseau
- La performance des opérations d'envoi de données en mode zero-copy utilisant la sous-système io_uring a été considérablement augmentée. La possibilité de regrouper (« bundle ») plusieurs buffers pour les opérations d'envoi et de réception de données a été ajoutée.
- Le code de collecte des déchets utilisé lors de l'envoi des descripteurs de fichiers via des sockets Unix avec des messages SCM_RIGHTS a été réécrit. Ce changement permet de résoudre le problème de l'accumulation de compteurs de références en boucle.
- La possibilité d'installer des filtres pour le protocole PFCP (Packet Forwarding Control Protocol), utilisé dans les réseaux 4G et 5G, a été ajoutée.
- Ajout du support pour l'option de sockets réseau SO_PEEK_OFF, qui, par analogie avec la même option pour les sockets Unix, permet de déterminer le décalage des données dans la file d'attente utilisée par l'appel système recv lors de l'indication du drapeau MSG_PEEK (marque les données comme non lues et elles seront à nouveau fournies lors de l'appel suivant de recv).
- Le sous-système io_uring a ajouté le support de l'opération IORING_CQE_F_SOCK_NONEMPTY, permettant de déterminer la présence de requêtes de connexion en attente sur un socket réseau.
- Une implémentation de la technologie PoE (Power over Ethernet) a été proposée, basée sur le code précédemment disponible pour le support de PoDL (Power over Data Line) et compatible avec les contrôleurs PoE Microchip PD692x0 et TI TPS23881.
- Pour les protocoles TCP, DCCP et MPTC, le support du mécanisme rstreason a été ajouté, permettant de déterminer la raison de l'envoi des paquets RST (par exemple, NO_SOCKET).
- Matériel
- Le pilote panthor pour la dixième génération de GPU Mali (G310, G510, G710) a été inclus, utilisant la technologie CSF (Command Stream Frontend), déchargeant certaines fonctions du pilote vers le firmware pour réduire la charge sur le CPU et offrant un nouveau modèle d'organisation de l'exécution des travaux sur le GPU. Des modifications pour supporter le nouveau pilote ont également été acceptées dans Mesa et incluses dans le pilote Gallium panfrost pour les GPU Mali.
- Des identifiants PCI pour les nouvelles cartes graphiques discrètes Intel Arc (DG2/Alchemist) ont été ajoutés au pilote i915.
- Le travail sur le pilote drm (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe, utilisée dans les cartes graphiques Intel de la famille Arc et dans le graphisme intégré à partir des processeurs Tiger Lake, a été poursuivi. Le support du CPU Arrow Lake H a été ajouté. Le support des processeurs Lunar Lake est en cours de mise en œuvre. Un support initial du mécanisme SR-IOV (Single Root I/O Virtualization) a été ajouté.
- Le pilote AMDGPU a ajouté le support de SMU 14.0 (System Management Unit). La possibilité d'utiliser les nouveaux GPU AMD sur des systèmes avec l'architecture RISC-V a été ajoutée.
- Un pilote pour l'accélérateur d'opérations cryptographiques Tegra Security Engine a été ajouté, qui peut être utilisé pour accélérer AES et divers algorithmes de hachage.
- Le support pour les panneaux d'écran 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 et AUO B120XAN01.0 a été ajouté.
- Prise en charge ajoutée des sous-systèmes audio des ordinateurs portables Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X et ASUS Zenbook 2024 HN7306. Prise en charge ajoutée des cartes son externes Vocaster One et Vocaster Two. Un pilote pour les amplificateurs NAU8325 de la société Nuvoton Technology a été ajouté.
- Le pilote HID-Steam prend en charge l'IMU (Unité de mesure inertielle) du contrôleur de jeu Steam Deck, permettant d'utiliser un nœud evdev séparé pour accéder aux données du gyroscope et de l'accéléromètre.
- Des modifications ont été apportées pour prendre en charge le SoC ARM Snapdragon X Elite, qui utilise un CPU Qualcomm Oryon à 12 cœurs et un GPU Qualcomm Adreno. La puce est destinée à être utilisée dans des ordinateurs portables et des PC, et dépasse dans de nombreux tests de performance les puces Apple M3 et Intel Core Ultra 155H.
- Prise en charge ajoutée des plateformes ARM, des SoC et des appareils : PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 Chine, 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.
- Prise en charge ajoutée des cartes Milk-V Mars utilisant le SoC Starfive JH7110 basé sur l'architecture RISC-V.
Parallèlement, la Fondation latino-américaine pour le logiciel libre a formé une version entièrement libre du noyau 6.10 — Linux-libre 6.10-gnu, nettoyée des éléments de firmware et de pilotes contenant des composants non libres ou des segments de code dont l'utilisation est limitée par le fabricant. Dans la version 6.10, le code pour nettoyer les blobs dans les pilotes Intel i915, rtl8xxxu, qla2xxx et QCAI sahara a été mis à jour. Les noms des blobs dans les fichiers dts (devicetree) pour l'architecture Aarch64 ont été nettoyés. De nouveaux fichiers ajoutés dans les pilotes Adreno, Intel IPU3 et PRUEth ont été nettoyés des blobs. Le nettoyage de nouveaux pilotes Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID et pcm6240 a été effectué. Le nettoyage du pilote USB Prism2.5/3 USB, qui a été supprimé du noyau, a été arrêté.
Source : opennet.ru
