Version du noyau Linux 5.18

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 5.18. Parmi les changements les plus notables : un nettoyage majeur des fonctionnalités obsolètes a été effectué, le Reiserfs FS a été déclaré obsolète, des événements de traçage des processus utilisateur ont été implémentés, la prise en charge du mécanisme de blocage des exploits Intel IBT a été ajoutée, un mode de détection de dépassement de tampon a été activé lorsque en utilisant la fonction memcpy(), un mécanisme de suivi des appels de fonction fprobe a été ajouté, les performances du planificateur de tâches sur les processeurs AMD Zen ont été améliorées, un pilote de gestion des fonctionnalités du processeur Intel (SDS) a été inclus, certains correctifs ont été intégrés pour la restructuration des fichiers d'en-tête, et l'utilisation de la norme C11 a été approuvée.

La nouvelle version comprend 16206 2127 correctifs de 14203 1995 développeurs (dans la dernière version, il y avait 108 14235 correctifs de 1340982 593836 développeurs), la taille du correctif est de 44 Mo (les modifications ont affecté 5.18 16 fichiers, 11 3 3 lignes de code ont été ajoutées, XNUMX XNUMX lignes ont été supprimées). Environ XNUMX % de toutes les modifications introduites dans la version XNUMX sont liées aux pilotes de périphériques, environ XNUMX % des modifications sont liées à la mise à jour du code spécifique aux architectures matérielles, XNUMX % sont liées à la pile réseau, XNUMX % aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 5.18 :

  • Sous-système de disque, E/S et systèmes de fichiers
    • Le système de fichiers Btrfs a ajouté la prise en charge du transfert de données compressées lors de l'exécution d'opérations d'envoi et de réception. Auparavant, lors de l'utilisation de l'envoi/réception, le côté expéditeur décompressait les données stockées sous forme compressée et le côté récepteur les recompressait avant de les écrire. Dans le noyau 5.18, les applications de l'espace utilisateur utilisant des appels d'envoi/réception ont eu la possibilité de transmettre des données compressées sans reconditionnement. La fonctionnalité est implémentée grâce aux nouvelles opérations ioctl BTRFS_IOC_ENCODED_READ et BTRFS_IOC_ENCODED_WRITE, qui vous permettent de lire et d'écrire directement des informations dans les extensions.

      De plus, Btrfs améliore les performances de fsync. Ajout de la possibilité de dédupliquer et d'effectuer un reflink (clonage des métadonnées de fichiers en créant un lien vers des données existantes sans les copier) pour l'ensemble du stockage, sans se limiter aux points de montage.

    • En mode Direct I/O, il est possible d'accéder aux fichiers chiffrés lorsque fscrypt utilise le chiffrement en ligne, dans lequel les opérations de chiffrement et de déchiffrement sont effectuées par le contrôleur de lecteur plutôt que par le noyau. Avec le chiffrement régulier du noyau, l'accès aux fichiers chiffrés à l'aide d'E/S directes est toujours impossible, car l'accès aux fichiers contourne le mécanisme de mise en mémoire tampon du noyau.
    • Le serveur NFS inclut par défaut la prise en charge du protocole NFSv3, qui ne nécessite désormais plus d'activation distincte et est disponible lorsque NFS est généralement activé. NFSv3 est considéré comme la version principale et toujours prise en charge de NFS, et la prise en charge de NFSv2 pourrait être interrompue à l'avenir. L'efficacité de la lecture du contenu du répertoire a été considérablement améliorée.
    • Le système de fichiers ReiserFS est obsolète et devrait être supprimé en 2025. La dépréciation de ReiserFS réduira les efforts nécessaires pour maintenir les modifications à l'échelle du système de fichiers liées à la prise en charge de la nouvelle API pour le montage, iomap et les tomes.
    • Pour le système de fichiers F2FS, la possibilité de mapper les ID utilisateur des systèmes de fichiers montés a été implémentée, ce qui est utilisé pour comparer les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec un autre utilisateur sur le système actuel.
    • Le code de calcul des statistiques dans les gestionnaires Device-mapper a été retravaillé, ce qui a considérablement amélioré la précision de la comptabilité dans les gestionnaires tels que dm-crypt.
    • Les appareils NVMe prennent désormais en charge les sommes de contrôle 64 bits pour la vérification de l'intégrité.
    • Pour le système de fichiers exfat, une nouvelle option de montage "keep_last_dots" a été proposée, qui désactive la suppression des points à la fin du nom de fichier (sous Windows, les points à la fin du nom de fichier sont supprimés par défaut).
    • EXT4 améliore les performances du mode fast_commit et augmente l'évolutivité. L'option de montage « mb_optimize_scan », qui permet d'augmenter les performances dans des conditions de fragmentation importante du système de fichiers, est adaptée pour travailler avec des fichiers avec des extensions.
    • La prise en charge des flux d'écriture dans le sous-système prenant en charge les périphériques de bloc a été interrompue. Cette fonctionnalité a été proposée pour les SSD, mais n'était pas répandue et aucun appareil actuellement utilisé ne prend en charge ce mode et il est peu probable qu'elle apparaisse à l'avenir.
  • Services mémoire et système
    • L'intégration d'un ensemble de correctifs a commencé, permettant de réduire considérablement le temps de reconstruction du noyau en restructurant la hiérarchie des fichiers d'en-tête et en réduisant le nombre de dépendances croisées. Le noyau 5.18 inclut des correctifs 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 CPU lors de l'assemblage du noyau/sched/code a été réduite de 61 % et le temps réel a diminué de 3.9 % (de 2.95 à 2.84 secondes).
    • Le code du noyau est autorisé à utiliser la norme C11, publiée en 2011. Auparavant, le code ajouté au noyau devait être conforme à la spécification ANSI C (C89), créée en 1989. Dans les scripts de construction du noyau 5.18, l'option '—std=gnu89' est remplacée par '—std=gnu11 -Wno-shift-negative-value'. La possibilité d'utiliser la norme C17 a été envisagée, mais dans ce cas, il serait nécessaire d'augmenter la version minimale prise en charge de GCC, tandis que l'inclusion du support C11 correspond aux exigences actuelles de la version GCC (5.1).
    • Amélioration des performances de planification des tâches sur les processeurs AMD avec microarchitecture Zen, qui fournissent plusieurs caches de dernier niveau (LLC) pour chaque nœud avec des canaux de mémoire locaux. La nouvelle version élimine le déséquilibre LLC entre les nœuds NUMA, ce qui a entraîné une augmentation significative des performances pour certains types de charges de travail.
    • Les outils de traçage des applications dans l'espace utilisateur ont été étendus. La nouvelle version du noyau ajoute la possibilité aux processus utilisateur de créer des événements utilisateur et d'écrire des données dans le tampon de trace, qui peuvent être visualisées via les utilitaires de traçage standard du noyau tels que ftrace et perf. Les événements de trace de l'espace utilisateur sont isolés des événements de trace du noyau. L'état des événements peut être consulté via le fichier /sys/kernel/debug/tracing/user_events_status, et l'enregistrement des événements et l'enregistrement des données via le fichier /sys/kernel/debug/tracing/user_events_data.
    • Ajout d'un mécanisme de surveillance des appels de fonction (sonde) - fprobe. L'API fprobe est basée sur ftrace, mais n'est limitée que par la possibilité d'attacher des gestionnaires de rappel aux points d'entrée et de sortie de fonction. Contrairement aux kprobes et kretprobes, le nouveau mécanisme vous permet d'utiliser un seul gestionnaire pour plusieurs fonctions à la fois.
    • La prise en charge des anciens processeurs ARM (ARMv4 et ARMv5) qui ne sont pas équipés d'une unité de gestion de mémoire (MMU) a été interrompue. La prise en charge des systèmes ARMv7-M sans MMU est conservée.
    • La prise en charge de l'architecture NDS32 de type RISC utilisée dans les processeurs Andes Technologies a été interrompue. Le code a été supprimé en raison du manque de maintenance et du manque de demande de prise en charge de NDS32 dans le noyau Linux principal (les utilisateurs restants utilisent des versions de noyau spécialisées provenant de fabricants de matériel).
    • Par défaut, la construction du noyau avec la prise en charge du format de fichier exécutable a.out est désactivée pour les architectures alpha et m68k, qui continuent d'utiliser ce format. Il est probable que la prise en charge de l'ancien format a.out sera bientôt complètement supprimée du noyau. Des projets de suppression du format a.out sont discutés depuis 2019.
    • L'architecture PA-RISC fournit une prise en charge minimale du mécanisme vDSO (objets partagés dynamiques virtuels), qui fournit un ensemble limité d'appels système disponibles dans l'espace utilisateur sans changement de contexte. La prise en charge de vDSO a permis d'implémenter la possibilité de s'exécuter avec une pile non exécutable.
    • Ajout de la prise en charge du mécanisme Intel HFI (Hardware Feedback Interface), qui permet au matériel de transmettre des informations au noyau sur les performances actuelles et l'efficacité énergétique de chaque processeur.
    • Ajout d'un pilote pour le mécanisme Intel SDSi (Software-Defined Silicon), qui vous permet de contrôler l'inclusion 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 les puces peuvent être fournies à un prix inférieur avec des fonctions avancées verrouillées, qui peuvent ensuite être « achetées » et des capacités supplémentaires activées sans remplacement matériel de la puce.
    • Le pilote amd_hsmp a été ajouté pour prendre en charge l'interface AMD HSMP (Host System Management Port), qui permet d'accéder aux fonctions de gestion du processeur via un ensemble de registres spéciaux apparus dans les processeurs de serveur AMD EPYC à partir de la génération Fam19h. Par exemple, via HSMP, vous pouvez obtenir des données sur la consommation d'énergie et la température, définir des limites de fréquence, activer divers modes d'amélioration des performances et gérer les paramètres de mémoire.
    • L'interface d'E/S asynchrone io_uring implémente l'option IORING_SETUP_SUBMIT_ALL pour enregistrer un ensemble de descripteurs de fichiers dans un tampon en anneau, et l'opération IORING_OP_MSG_RING pour envoyer un signal d'un tampon en anneau à un autre tampon en anneau.
    • Le mécanisme DAMOS (Data Access Monitoring-based Operation Schemes), qui permet de libérer de la mémoire en tenant compte de la fréquence d'accès à la mémoire, a étendu les capacités de surveillance des opérations de mémoire depuis l'espace utilisateur.
    • Une troisième série de correctifs a été intégrée avec la mise en œuvre du concept de folios de pages, qui ressemblent à des pages composées, mais présentent une sémantique améliorée et une organisation du travail plus claire. L'utilisation de tomes vous permet d'accélérer la gestion de la mémoire dans certains sous-systèmes du noyau. Dans les correctifs proposés, les fonctions de gestion de la mémoire interne ont été traduites en folios, y compris des variantes de la fonction get_user_pages(). Prise en charge de la création de gros volumes dans du code en lecture anticipée.
    • Le système d'assemblage prend désormais en charge les variables d'environnement USERCFLAGS et USERLDFLAGS, avec lesquelles vous pouvez transmettre des indicateurs supplémentaires au compilateur et à l'éditeur de liens.
    • Dans le sous-système eBPF, le mécanisme BTF (BPF Type Format), qui fournit des informations de vérification de type dans le pseudocode BPF, offre la possibilité d'ajouter des annotations aux variables qui font référence à des zones de mémoire dans l'espace utilisateur. Les annotations aident le système de vérification du code BPF à mieux identifier et vérifier les accès à la mémoire.
    • Un nouveau gestionnaire d'allocation de mémoire pour stocker les programmes BPF chargés a été proposé, qui permet une utilisation plus efficace de la mémoire dans les situations où un grand nombre de programmes BPF sont chargés.
    • L'indicateur MADV_DONTNEED_LOCKED a été ajouté à l'appel système madvise(), qui fournit des outils pour optimiser la gestion de la mémoire des processus, qui complète l'indicateur MADV_DONTNEED existant, grâce auquel le noyau peut être informé à l'avance de la libération imminente d'un bloc mémoire, c'est-à-dire que ce bloc n'est plus nécessaire et peut être utilisé par le noyau. Contrairement à MADV_DONTNEED, l'utilisation du flag MADV_DONTNEED_LOCKED est autorisée pour les pages mémoire épinglées en RAM, qui, lors de l'appel de madvise, sont expulsées sans changer leur statut épinglé et, en cas d'accès ultérieur au bloc et génération d'une « page faute », sont renvoyés avec la reliure préservée. De plus, une modification a été ajoutée pour permettre à l'indicateur MADV_DONTNEED d'être utilisé avec des pages de mémoire volumineuses dans HugeTLB.
  • Virtualisation et sécurité
    • Pour l'architecture x86, la prise en charge du mécanisme de protection du flux de commandes Intel IBT (Indirect Branch Tracking) a été ajoutée, qui empêche l'utilisation de techniques de construction d'exploit utilisant des techniques de programmation orientées retour (ROP, Return-Oriented Programming), dans lesquelles l'exploit se forme sous la forme d'une chaîne d'appels déjà existant en mémoire de morceaux d'instructions machine se terminant par une instruction de retour de contrôle (en règle générale, ce sont les fins de fonctions). L'essence de la méthode de protection mise en œuvre est de bloquer les transitions indirectes vers le corps d'une fonction en ajoutant une instruction ENDBR spéciale au début de la fonction et en autorisant l'exécution d'une transition indirecte uniquement dans le cas d'une transition vers cette instruction (une transition indirecte). l'appel via JMP et CALL doit toujours tomber sur l'instruction ENDBR, qui est placée au tout début des fonctions).
    • Activation d'une vérification plus stricte des limites de tampon dans les fonctions memcpy(), memmove() et memset(), effectuée au moment de la compilation lorsque le mode CONFIG_FORTIFY_SOURCE est activé. Le changement ajouté revient à vérifier si des éléments de structures dont la taille est connue dépassent les limites. Il est à noter que la fonctionnalité implémentée permettrait de bloquer tous les dépassements de tampon du noyau liés à memcpy() identifiés au moins au cours des trois dernières années.
    • Ajout de la deuxième partie du code pour l'implémentation mise à jour du générateur de nombres pseudo-aléatoires RDRAND, qui est responsable du fonctionnement des périphériques /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 l'apparition de doublons dans le flux de nombres aléatoires lors du démarrage des machines virtuelles et le passage à l'utilisation de la fonction de hachage BLAKE2s au lieu de SHA1 pour opérations de mélange d’entropie. Le changement a amélioré la sécurité du générateur de nombres pseudo-aléatoires en éliminant l'algorithme SHA1 problématique et en éliminant l'écrasement du vecteur d'initialisation RNG. Étant donné que l'algorithme BLAKE2s est supérieur à SHA1 en termes de performances, son utilisation a également eu un effet positif sur les performances.
    • Pour l'architecture ARM64, la prise en charge d'un nouvel algorithme d'authentification de pointeur - "QARMA3", qui est plus rapide que l'algorithme QARMA tout en maintenant le niveau de sécurité approprié, a été ajoutée. La technologie vous permet d'utiliser des instructions ARM64 spécialisées pour vérifier les adresses de retour à l'aide de signatures numériques stockées dans les bits supérieurs inutilisés du pointeur lui-même.
    • Pour l'architecture ARM64, le support de l'assembleur a été implémenté avec l'inclusion dans GCC 12 d'un mode de protection contre l'écrasement de l'adresse de retour d'une fonction en cas de débordement de tampon sur la pile. L'essence de la protection est de sauvegarder l'adresse de retour dans une pile « fantôme » distincte après avoir transféré le contrôle à une fonction et de récupérer cette adresse avant de quitter la fonction.
    • Ajout d'un nouveau trousseau de clés - "machine", contenant les clés du propriétaire du système (MOK, Machine Owner Keys), pris en charge dans le chargeur de démarrage shim. Ces clés peuvent être utilisées pour signer numériquement les composants du noyau chargés après le démarrage (par exemple, les modules du noyau).
    • Suppression de la prise en charge des clés privées asymétriques pour les TPM, qui étaient proposées dans une ancienne version du TPM, présentaient des problèmes de sécurité connus et n'étaient pas largement adoptées dans la pratique.
    • Ajout de la protection des données avec le type size_t contre les débordements d'entiers. Le code comprend les gestionnaires size_mul(), size_add() et size_sub(), qui vous permettent de multiplier, d'ajouter et de soustraire des tailles en toute sécurité avec le type size_t.
    • Lors de la construction du noyau, les indicateurs « -Warray-bounds » et « -Wzero-length-bounds » sont activés, qui affichent des avertissements lorsque l'index dépasse la limite du tableau et lorsque des tableaux de longueur nulle sont utilisés.
    • Le périphérique virtio-crypto a ajouté la prise en charge du cryptage à l'aide de l'algorithme RSA.
  • Sous-système réseau
    • Dans la mise en œuvre de ponts réseau, la prise en charge du mode de liaison de port (mode verrouillé) a été ajoutée, dans laquelle l'utilisateur peut envoyer du trafic via le 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, les VLAN ne pouvaient être mappés que directement sur STP (1:1), chaque VLAN étant géré indépendamment. La nouvelle version ajoute le paramètre mst_enable, lorsqu'il est activé, l'état des VLAN est contrôlé par le module MST (Multiple Spanning Trees) et la liaison des VLAN peut correspondre au modèle M:N.
    • Les travaux se sont poursuivis sur l'intégration d'outils dans la pile réseau pour suivre les raisons de l'abandon de paquets (codes de raison). Le code de raison est envoyé lorsque la mémoire associée au paquet est libérée et permet des situations telles que la suppression du paquet en raison d'erreurs d'en-tête, la détection d'usurpation d'identité rp_filter, une somme de contrôle invalide, une mémoire insuffisante, des règles IPSec XFRM déclenchées, un numéro de séquence TCP non valide, etc.
    • Il est possible de transférer des paquets réseau à partir de programmes BPF lancés depuis l'espace utilisateur en mode BPF_PROG_RUN, dans lequel les programmes BPF sont exécutés dans le noyau, mais renvoient le résultat dans l'espace utilisateur. Les paquets sont transmis à l'aide du sous-système XDP (eXpress Data Path). Le mode de traitement des paquets en direct est pris en charge, dans lequel le processeur XDP peut rediriger les paquets réseau à la volée vers la pile réseau ou vers d'autres appareils. Il est également possible de créer des générateurs logiciels de trafic externe ou de remplacer des trames réseau dans la pile réseau.
    • Pour les programmes BPF attachés aux groupes de contrôle réseau, des fonctions d'assistance ont été proposées pour définir explicitement la valeur de retour des appels système, ce qui permet de transmettre des informations plus complètes sur les raisons du blocage d'un appel système.
    • Le sous-système XDP (eXpress Data Path) a ajouté la prise en charge des paquets fragmentés placés dans plusieurs tampons, ce qui vous permet de traiter les trames Jumbo dans XDP et d'utiliser TSO/GRO (TCP Segmentation Offload/Generic Receiver Offload) pour XDP_REDIRECT.
    • Le processus de suppression des espaces de noms réseau a été considérablement accéléré, ce qui était demandé sur certains grands systèmes avec un volume de trafic important.
  • équipement
    • Le pilote amdgpu inclut par défaut la technologie de synchronisation adaptative FreeSync, qui vous permet d'ajuster le taux de rafraîchissement des informations sur l'écran, garantissant des images fluides et sans déchirures lorsque vous jouez à des jeux et regardez des vidéos. Le support du GPU Aldebaran a été annoncé comme stable.
    • Le pilote i915 ajoute la prise en charge des puces Intel Alderlake N et des cartes graphiques discrètes Intel DG2-G12 (Arc Alchemist).
    • Le nouveau pilote prend en charge des débits binaires plus élevés pour les interfaces DP/eDP et prend en charge les rallonges de câble lttprs (Link-Training Tunable PHY Repeaters).
    • Dans le sous-système drm (Direct Rendering Manager) dans les pilotes armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen et vc4, prise en charge des paramètres a été ajouté nomodeset, qui vous permet de désactiver la commutation des modes vidéo au niveau du noyau et l'utilisation d'outils d'accélération matérielle du rendu, ne laissant que les fonctionnalités liées au framebuffer du système.
    • Ajout de la prise en charge d'ARM SoС Qualcomm Snapdragon 625/632 (utilisé dans les smartphones LG Nexus 5X et Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (utilisé dans Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (Prestigio PMT5008). tablette 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 et i.MXRTxxxx.
    • Ajout de la prise en charge des appareils et cartes ARM de 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 (NAS Ctera C200 V1 et V2), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Ajout de la prise en charge des systèmes audio et des 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. Ajout de l'implémentation initiale du pilote audio pour la puce Intel AVS DSP. Prise en charge des pilotes mis à jour pour Intel ADL et Tegra234 et modifications apportées pour améliorer la prise en charge audio sur les appareils Dell, HP, Lenovo, ASUS, Samsung et Clevo.

    Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 5.18 - Linux-libre 5.18-gnu, débarrassée des éléments de firmware et des pilotes contenant des composants ou des sections de code non libres, dont la portée est limitée par le fabricant. La nouvelle version nettoie les pilotes des panneaux MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) et Realtek 8852a/8852c, Intel AVS et Texas Instruments TAS5805M. Les fichiers DTS ont également été nettoyés pour divers SoC Qualcomm dotés de processeurs basés sur l'architecture AArch64. Code de nettoyage de blob mis à jour dans les pilotes et sous-systèmes du GPU AMD, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Source: opennet.ru

Ajouter un commentaire