Sortie du noyau Linux 5.18.

Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 5.18. Parmi les changements les plus notables : un grand nettoyage des fonctionnalités obsolètes a été réalisé, le système de fichiers Reiserfs a été déclaré obsolète, la traçabilité des processus utilisateurs a été implémentée, le support du mécanisme de blocage des exploits Intel IBT a été ajouté, un mode de détection de dépassement de tampon lors de l'utilisation de la fonction memcpy() a été inclus, un mécanisme de suivi des appels de fonctions fprobe a été ajouté, la performance du planificateur de tâches sur les CPU AMD Zen a été améliorée, un pilote pour gérer les fonctionnalités des CPU Intel (SDS) a été inclus, une partie des correctifs pour la restructuration des fichiers d'en-tête a été intégrée, et l'application de la norme C11 a été approuvée.

Dans cette nouvelle version, 16206 corrections ont été acceptées de 2127 développeurs (le dernier numéro comptait 14203 corrections de 1995 développeurs), la taille du patch est de 108 Mo (les modifications ont touché 14235 fichiers, 1340982 lignes de code ont été ajoutées, 593836 lignes ont été supprimées). Environ 44 % de toutes les modifications présentées dans 5.18 concernent les pilotes de périphériques, environ 16 % des modifications sont liées à la mise à jour de code spécifique aux architectures matérielles, 11 % concernent la pile réseau, 3 % les systèmes de fichiers et 3 % les sous-systèmes internes du noyau.

Les principales nouveautés du noyau 5.18 :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Dans le système de fichiers Btrfs, le support du passage de données compressées lors des opérations send et receive a été ajouté. Auparavant, lors de l'utilisation de send/receive, la partie émettrice décompressait les données stockées de manière compressée, et la partie réceptrice re-compressait avant d'écrire. Dans le noyau 5.18, les applications en espace utilisateur utilisant les appels send/receive peuvent transmettre des données compressées sans décompression préalable. Cette fonctionnalité est réalisée grâce aux nouvelles opérations ioctl BTRFS_IOC_ENCODED_READ et BTRFS_IOC_ENCODED_WRITE, qui permettent de lire et d'écrire directement des informations dans des extent.

      De plus, dans Btrfs, la performance de fsync a été améliorée. Un support pour la dé-duplication et l'exécution de reflink (clonage des métadonnées d'un fichier tout en créant une référence aux données existantes sans les copier réellement) a été ajouté pour l'ensemble du stockage, sans se limiter aux points de montage.

    • Le mode d'entrée/sortie directe (Direct I/O) permet l'accès aux fichiers chiffrés lors de l'utilisation du chiffrement inline dans fscrypt, où les opérations de chiffrement et de déchiffrement sont effectuées par le contrôleur de stockage et non par le noyau. Avec le chiffrement traditionnel au niveau du noyau, l'accès aux fichiers chiffrés via Direct I/O demeure impossible, car l'accès aux fichiers se fait sans passer par le mécanisme de mise en mémoire tampon du noyau.
    • Le serveur NFS prend en charge par défaut le protocole NFSv3, qui ne nécessite plus d'activation séparée et est disponible lors de l'activation générale de NFS. NFSv3 est considéré comme la version principale et toujours prise en charge de NFS, tandis que le support de NFSv2 pourrait être interrompu à l'avenir. L'efficacité de lecture du contenu des répertoires a été considérablement améliorée.
    • Le système de fichiers ReiserFS a été classé comme obsolète et sera supprimé en 2025. La déclassification de ReiserFS en tant qu'obsolète permettra de réduire le travail de maintenance des changements communs aux systèmes de fichiers liés au support de la nouvelle API pour le montage, iomap et les volumes.
    • Pour le système de fichiers F2FS, la possibilité de mapper les identifiants d'utilisateur des systèmes de fichiers montés a été mise en œuvre, ce qui est utilisé pour associer les fichiers d'un utilisateur spécifique sur une partition montée d'un autre utilisateur dans le système actuel.
    • Le code pour le calcul des statistiques dans les gestionnaires Device-mapper a été repensé, ce qui a permis d'améliorer considérablement la précision de la comptabilité dans des gestionnaires tels que dm-crypt.
    • Les dispositifs NVMe prennent en charge les sommes de contrôle 64 bits pour vérifier l'intégrité.
    • Pour le système de fichiers exfat, une nouvelle option de montage «keep_last_dots» a été proposée, interdisant la suppression des points à la fin du nom de fichier (dans Windows, les points à la fin du nom sont supprimés par défaut).
    • Dans EXT4, la performance du mode fast_commit a été améliorée et l'évolutivité a été augmentée. L'option de montage «mb_optimize_scan», permettant d'améliorer la performance en cas de forte fragmentation du système de fichiers, a été adaptée à l'utilisation avec des fichiers avec des extents.
    • La prise en charge des flux d'écriture (write stream) dans le sous-système qui gère les dispositifs de bloc a été interrompue. Cette fonctionnalité avait été proposée pour les SSD, mais ne s'est pas répandue et il n'existe plus de dispositifs prenant en charge ce mode, et il est peu probable qu'ils apparaissent à l'avenir.
  • Mémoire et services système
    • L'intégration d'un ensemble de patches visant à réduire considérablement le temps de reconstruction du noyau a commencé, grâce à la restructuration de l'ensemble des fichiers d'en-tête et à la réduction du nombre de dépendances croisées. La version 5.18 du noyau inclut des patches qui optimisent la structure des fichiers d'en-tête du planificateur de tâches (kernel/sched). Par rapport à la version précédente, la consommation de temps processeur lors de la compilation du code kernel/sched a diminué de 61 %, et le temps réel a diminué de 3,9 % (de 2,95 à 2,84 secondes).
    • L'utilisation de la norme C11, publiée en 2011, est désormais autorisée dans le code du noyau. Auparavant, le code ajouté au noyau devait respecter la spécification ANSI C (C89), qui date de 1989. Dans les scripts de compilation de la version 5.18 du noyau, l'option ‘—std=gnu89’ a été remplacée par ‘—std=gnu11 -Wno-shift-negative-value’. L'utilisation de la norme C17 a été envisagée, mais cela aurait nécessité d'augmenter la version minimale prise en charge de GCC, alors que le support de C11 est conforme aux exigences actuelles concernant la version de GCC (5.1).
    • Les performances de planification des tâches sur les processeurs AMD avec microarchitecture Zen ont été améliorées, ces derniers offrant plusieurs caches de dernier niveau (LLC, Last Level Cache) pour chaque nœud avec des canaux de mémoire locaux. Dans la nouvelle version, le déséquilibre de LLC entre les nœuds NUMA a été résolu, ce qui a conduit à une amélioration significative des performances sous certains types de charges.
    • Les outils de traçage des applications dans l'espace utilisateur ont été étendus. La nouvelle version du noyau permet aux processus utilisateurs de créer des événements de traçage (User events) et d'écrire des données dans un tampon de traçage, qui peuvent être consultés via des utilitaires de traçage classiques du noyau, tels que ftrace et perf. Les événements de traçage dans l'espace utilisateur sont isolés des événements de traçage du noyau. L'état des événements peut être consulté via le fichier /sys/kernel/debug/tracing/user_events_status, tandis que l'enregistrement d'événements et l'écriture de données se font via le fichier /sys/kernel/debug/tracing/user_events_data.
    • Un mécanisme de suivi (probe) des appels de fonctions a été ajouté — fprobe. L'API fprobe est basée sur ftrace, mais est limitée à la possibilité d'attacher des gestionnaires de rappel aux points d'entrée et de sortie des fonctions. Contrairement aux kprobes et kretprobes, ce nouveau mécanisme permet d'utiliser un seul gestionnaire pour plusieurs fonctions.
    • Le support des anciens processeurs ARM (ARMv4 et ARMv5) sans unité de gestion de mémoire (MMU) a été arrêté. Le support des systèmes ARMv7-M sans MMU est maintenu.
    • Le support de l'architecture NDS32, similaire à RISC, utilisée dans les processeurs de la société Andes Technologies, a été interrompu. Le code a été supprimé en raison de l'absence de maintenance et du manque d'intérêt pour le soutien de NDS32 dans le noyau principal de Linux (les utilisateurs restants utilisent des versions personnalisées du noyau proposées par les fabricants de matériel).
    • Par défaut, la compilation du noyau avec le support du format de fichiers exécutables a.out pour les architectures alpha et m68k, qui continuent d'utiliser ce format, a été désactivée. Il est probable que le support de l'ancien format a.out soit complètement supprimé du noyau dans un avenir proche. Des plans pour supprimer le format a.out sont discutés depuis 2019.
    • Un support minimal du mécanisme vDSO (virtual dynamic shared objects) a été implémenté pour l'architecture PA-RISC, offrant un ensemble limité d'appels système accessible dans l'espace utilisateur sans changement de contexte. Le support vDSO permet de lancer avec une pile non exécutable.
    • Le support du mécanisme Intel HFI (Hardware Feedback Interface) a été ajouté, permettant au matériel de transmettre au noyau des informations sur les performances actuelles et l'efficacité énergétique de chaque CPU.
    • Un pilote pour le mécanisme Intel SDSi (Software-Defined Silicon) a été ajouté, permettant de gérer l'activation de fonctionnalités supplémentaires dans le processeur (par exemple, des instructions spécialisées et une mémoire cache supplémentaire). L'idée est que des puces avec des fonctions avancées bloquées peuvent être fournies à un coût réduit, et ces fonctionnalités peuvent ensuite être 'achetées' et activées sans remplacer physiquement la puce.
    • Un pilote amd_hsmp a été ajouté pour prendre en charge l'interface AMD HSMP (Host System Management Port), offrant un accès aux fonctions de gestion du processeur via un ensemble de registres spéciaux apparus dans les processeurs serveurs AMD EPYC à partir de la génération Fam19h. Par exemple, via HSMP, il est possible d'obtenir des données sur la consommation d'énergie et la température, d'établir des limites de fréquence, d'activer différents modes de performance et de gérer les paramètres de fonctionnement de la mémoire.
    • L'interface d'entrées/sorties asynchrones io_uring a implémenté l'option IORING_SETUP_SUBMIT_ALL pour enregistrer dans le tampon circulaire un ensemble de descripteurs de fichiers, ainsi que l'opération IORING_OP_MSG_RING, permettant d'envoyer un signal d'un tampon circulaire à un autre.
    • Dans le mécanisme DAMOS (Data Access Monitoring-based Operation Schemes), qui permet de libérer de la mémoire en fonction de la fréquence d'accès à celle-ci, les possibilités de contrôle des opérations sur la mémoire depuis l'espace utilisateur ont été étendues.
    • La troisième série de correctifs a été intégrée, mettant en œuvre le concept de folios de mémoire (page folios), qui ressemblent aux pages de mémoire combinées (compound pages), mais avec une sémantique améliorée et une organisation plus claire du travail. L'utilisation de folios permet d'accélérer la gestion de la mémoire dans certains sous-systèmes du noyau. Les correctifs proposés ont permis de porter en folios les fonctions internes de gestion de la mémoire, y compris les variantes de la fonction get_user_pages(). Un support pour la création de grands folios dans le code de préchargement de données a été fourni.
    • Le système de construction a introduit le support des variables d'environnement USERCFLAGS et USERLDFLAGS, permettant de transmettre des flags supplémentaires au compilateur et au lisseur.
    • Dans le sous-système eBPF, le mécanisme BTF (BPF Type Format), fournissant des informations pour la vérification des types dans le pseudo-code BPF, a mis en œuvre la possibilité d'ajouter des annotations aux variables se référant à des zones de mémoire dans l'espace utilisateur. Les annotations aident le système de vérification du code BPF à identifier et vérifier avec plus de précision les accès à la mémoire.
    • Un nouveau gestionnaire d'allocation de mémoire a été proposé pour stocker les programmes BPF chargés, permettant d'utiliser plus efficacement la mémoire dans des situations de chargement d'un grand nombre de programmes BPF.
    • Dans l'appel système madvise(), un drapeau MADV_DONTNEED_LOCKED a été ajouté pour optimiser la gestion de la mémoire du processus. Ce drapeau complète le drapeau MADV_DONTNEED, permettant au noyau d'être informé à l'avance de la libération imminente d'un bloc de mémoire, c'est-à-dire qu'il n'est plus nécessaire et peut être utilisé par le noyau. Contrairement à MADV_DONTNEED, l'utilisation du drapeau MADV_DONTNEED_LOCKED est autorisée pour les pages de mémoire verrouillées en RAM, qui, lors de l'appel à madvise, sont expulsées sans changer leur statut de verrouillage et, en cas d'accès ultérieur au bloc générant une « faute de page », reviennent avec leur liaison intacte. De plus, une modification a été ajoutée pour permettre l'utilisation du drapeau MADV_DONTNEED avec des grandes pages de mémoire dans HugeTLB.
  • Virtualisation et sécurité
    • Pour l'architecture x86, le support du mécanisme de protection de l'exécution des commandes Intel IBT (Indirect Branch Tracking) a été ajouté. Ce mécanisme empêche l'utilisation de techniques d'exploitation basées sur le retour orienté sur la programmation (ROP, Return-Oriented Programming), où l'exploitation est formée sous la forme d'une chaîne d'appels aux morceaux d'instructions machine déjà présents en mémoire, se terminant par une instruction de retour de contrôle (généralement à la fin des fonctions). Le principe de cette méthode de protection est de bloquer les sauts indirects vers le corps de la fonction en ajoutant au début de la fonction une instruction spéciale ENDBR et en autorisant l'exécution par saut indirect uniquement si elle est dirigée vers cette instruction (un appel indirect par JMP et CALL doit toujours tomber sur l'instruction ENDBR, qui est placée au tout début de la fonction).
    • Une vérification plus stricte des limites des tampons dans les fonctions memcpy(), memmove() et memset() a été activée, effectuée au moment de la compilation lorsque le mode CONFIG_FORTIFY_SOURCE est activé. La modification ajoutée consiste à vérifier le dépassement des limites des éléments de structures dont la taille est connue. Il est à noter que cette capacité mise en œuvre permettrait de bloquer tous les dépassements de tampon liés à memcpy() dans le noyau, identifiés depuis au moins les trois dernières années.
    • La deuxième partie du code de la mise à jour du générateur de nombres aléatoires RDRAND a été ajoutée, responsable du fonctionnement des dispositifs /dev/random et /dev/urandom. La nouvelle implémentation se distingue par l'unification du fonctionnement de /dev/random et /dev/urandom, l'ajout d'une protection contre la duplication dans le flux de nombres aléatoires lors du lancement. machines virtuelles et le passage à l'utilisation de la fonction de hachage BLAKE2s au lieu de SHA1 pour les opérations de mélange d'entropie. Ce changement a permis d'améliorer la sécurité du générateur de nombres aléatoires en éliminant l'algorithme problématique SHA1 et en excluant la réécriture du vecteur d'initialisation de RNG. Étant donné que l'algorithme BLAKE2s surpasse SHA1 en termes de performance, son utilisation a également eu un impact positif sur les performances.
    • Pour l'architecture ARM64, le support d'un nouvel algorithme d'authentification des pointeurs – « QARMA3 » – a été ajouté, qui est plus rapide que l'algorithme QARMA tout en maintenant un niveau de sécurité adéquat. La technologie permet d'utiliser des instructions ARM64 spécialisées pour vérifier les adresses de retour à l'aide de signatures numériques, qui sont stockées dans les bits supérieurs inutilisés du pointeur lui-même.
    • Pour l'architecture ARM64, le support d'une build avec activation dans GCC 12 du mode de protection contre la réécriture de l'adresse de retour depuis une fonction en cas de débordement de tampon sur la pile a été réalisé. La protection consiste à conserver l'adresse de retour après le passage de contrôle à la fonction dans une 'pile d'ombre' séparée et à extraire cette adresse avant de sortir de la fonction.
    • Un nouveau magasin de clés (keyring) – « machine » – contenant les clés du propriétaire du système (MOK, Machine Owner Keys), prises en charge dans le chargeur shim, a été ajouté. Ces clés peuvent être utilisées pour signer numériquement des composants du noyau chargés après le démarrage initial (par exemple, des modules du noyau).
    • Le support des clés privées asymétriques pour TPM, proposées dans une version obsolète de TPM, présentant des problèmes de sécurité connus et n'ayant pas été largement adoptées, a été supprimé.
    • Une protection des données de type size_t contre les débordements d'entiers a été ajoutée. Le code utilise les gestionnaires size_mul(), size_add() et size_sub() qui permettent d'effectuer des multiplications, additions et soustractions de manière sécurisée sur des tailles de type size_t.
    • Lors de la compilation du noyau, les flags «-Warray-bounds» et «-Wzero-length-bounds» ont été inclus, générant des avertissements en cas de dépassement d'index dans le tableau et d'utilisation de tableaux de longueur nulle.
    • Le périphérique virtio-crypto a ajouté le support du chiffrement avec l'algorithme RSA.
  • Sous-système réseau
    • Dans l'implémentation des ponts réseau, le mode de liaison des ports (locked mode) a été ajouté, permettant à l'utilisateur d'envoyer du trafic via un port uniquement à partir d'une adresse MAC autorisée. La possibilité d'utiliser plusieurs structures pour évaluer l'état du protocole STP (Spanning Tree Protocol) a également été ajoutée. Auparavant, pour les VLAN, seule une liaison directe au STP (1:1) pouvait être effectuée, chaque VLAN étant géré indépendamment. Dans la nouvelle version, le paramètre mst_enable a été ajouté, et lorsqu'il est activé, l'état des VLAN est contrôlé par le module MST (Multiple Spanning Trees), permettant à la liaison des VLAN de correspondre au modèle M:N.
    • Le travail d'intégration d'outils de suivi des raisons de rejet des paquets (codes reason) a été poursuivi. Le code de raison est transmis lors de la libération de la mémoire associée au paquet et permet de tenir compte de situations telles que le rejet d'un paquet en raison d'erreurs dans les champs de l'en-tête, la détection de spoofing par le filtre rp_filter, une somme de contrôle incorrecte, un manque de mémoire, le déclenchement de règles IPSec XFRM, un numéro de séquence TCP incorrect, etc.
    • Il est désormais possible de transmettre des paquets réseau à partir de programmes BPF exécutés depuis l'espace utilisateur en mode BPF_PROG_RUN, où les programmes BPF s'exécutent dans le noyau mais retournent le résultat à l'espace utilisateur. Les paquets sont transmis en utilisant le sous-système XDP (eXpress Data Path). Le mode de traitement en direct des paquets est pris en charge, permettant à l'agent XDP de rediriger à la volée les paquets réseau vers la pile réseau ou vers d'autres dispositifs. Il est également possible de créer des générateurs de trafic externe logiciels ou d'injecter des trames réseau dans la pile réseau.
    • Pour les programmes BPF attachés aux cgroups réseau, des fonctions auxiliaires ont été proposées pour définir explicitement la valeur renvoyée par les appels système, permettant de fournir des informations plus complètes sur les raisons du blocage de l'appel système.
    • Le sous-système XDP (eXpress Data Path) a ajouté le support des paquets fragmentés, placés dans plusieurs tampons, permettant de traiter dans XDP des Jumbo-frames et d'appliquer TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) pour XDP_REDIRECT.
    • Le processus de suppression des espaces de noms réseau a été considérablement accéléré, ce qui était nécessaire sur certains grands systèmes avec un volume de trafic élevé.
  • Matériel
    • Le pilote amdgpu active par défaut la technologie de synchronisation adaptative FreeSync, qui permet de régler la fréquence de mise à jour de l'affichage, assurant ainsi une fluidité et l'absence de déchirements d'image lors des jeux et du visionnage de vidéos. Le support stable du GPU Aldebaran a été annoncé.
    • Le pilote i915 a ajouté le support des puces Intel Alderlake N et des cartes graphiques discrètes Intel DG2-G12 (Arc Alchemist).
    • Le pilote nouveau prend en charge des débits plus élevés pour les interfaces DP/eDP et le support des répéteurs d'interface lttprs (Link-Training Tunable PHY Repeaters).
    • Dans le sous-système drm (Direct Rendering Manager) des pilotes armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen et vc4, le paramètre nomodeset a été ajouté, permettant de désactiver le changement de modes vidéo au niveau du noyau et l'utilisation des méthodes d'accélération matérielle du rendu, en laissant uniquement la fonctionnalité liée au framebuffer système.
    • Ajout de la prise en charge des SoC ARM Qualcomm Snapdragon 625/632 (utilisé dans les smartphones LG Nexus 5X et Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (utilisé dans le Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tablette Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 et i.MXRTxxxx.
    • Ajout de la prise en charge des dispositifs ARM et des cartes Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, tablette Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 et OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 et V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Ajout du support pour les systèmes audio et les codecs AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Implémentation initiale d'un pilote audio pour le DSP Intel AVS. Mise à jour du support des pilotes pour Intel ADL et Tegra234, ainsi que modifications pour améliorer le support audio sur les appareils Dell, HP, Lenovo, ASUS, Samsung et Clevo.

    Parallèlement, la Fondation Latino-Américaine pour le Logiciel Libre a formé une version entièrement libre du noyau 5.18 — Linux-libre 5.18-gnu, nettoyé de tous les éléments de micrologiciels et de pilotes contenant des composants non libres ou des portions de code dont l'utilisation est limitée par le fabricant. Dans cette nouvelle version, les pilotes pour les panneaux MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) et Realtek 8852a/8852c ont été nettoyés. Le code de nettoyage pour les puces audio Intel AVS et Texas Instruments TAS5805M a également été ajusté. Le nettoyage des fichiers DTS pour différents SoC Qualcomm utilisant des processeurs basés sur l'architecture AArch64 a été effectué. Le code de nettoyage des blobs dans les pilotes et sous-systèmes AMD GPU, MediaTek MT7915, WiFi Silicon Labs WF200+, Ethernet Mellanox Spectru, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART a été mis à jour.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster