Version du noyau Linux 6.2

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 6.2. Parmi les changements les plus notables : l'acceptation du code sous licence Copyleft-Next est autorisée, l'implémentation de RAID5/6 dans Btrfs est améliorée, l'intégration du support du langage Rust se poursuit, le surcoût de protection contre les attaques Retbleed est réduit, le la possibilité de réguler la consommation de mémoire lors de la réécriture est ajoutée, un mécanisme est ajouté pour l'équilibrage TCP PLB (Protective Load Balancing), un mécanisme hybride de protection du flux de commandes (FineIBT) a été ajouté, BPF a désormais la possibilité de définir ses propres objets et structures de données , l'utilitaire rv (Runtime Verification) est inclus, la consommation d'énergie lors de la mise en œuvre des verrous RCU a été réduite.

La nouvelle version comprend 16843 2178 correctifs provenant de 62 14108 développeurs, la taille du correctif est de 730195 Mo (les modifications ont affecté 409485 42 fichiers, 6.2 16 lignes de code ont été ajoutées, 12 4 lignes ont été supprimées). Environ 3 % 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 % sont liées aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 6.2 :

  • Services mémoire et système
    • Il est permis d'inclure dans le noyau le code et les modifications fournies sous la licence Copyleft-Next 0.3.1. La licence Copyleft-Next a été créée par l'un des auteurs de la GPLv3 et est entièrement compatible avec la licence GPLv2, comme l'ont confirmé les avocats de SUSE et Red Hat. Par rapport à la GPLv2, la licence Copyleft-Next est beaucoup plus compacte et plus facile à comprendre (la partie introductive et la mention des compromis obsolètes ont été supprimées), définit le délai et la procédure d'élimination des violations et supprime automatiquement les exigences de copyleft pour les logiciels obsolètes qui a plus de 15 ans.

      Copyleft-Next contient également une clause d'octroi de technologie propriétaire qui, contrairement à la GPLv2, rend cette licence compatible avec la licence Apache 2.0. Pour garantir une compatibilité totale avec GPLv2, Copyleft-Next indique explicitement qu'une œuvre dérivée peut être fournie sous licence GPL en plus de la licence Copyleft-Next originale.

    • La structure comprend l'utilitaire « rv », qui fournit une interface d'interaction depuis l'espace utilisateur avec les gestionnaires du sous-système RV (Runtime Verification), conçu pour vérifier le bon fonctionnement sur des systèmes hautement fiables garantissant l'absence de pannes. La vérification est effectuée au moment de l'exécution en attachant des gestionnaires à des points de trace qui vérifient la progression réelle de l'exécution par rapport à un modèle déterministe de référence prédéterminé de la machine qui définit le comportement attendu du système.
    • Le périphérique zRAM, qui permet de stocker la partition d'échange en mémoire sous une forme compressée (un périphérique bloc est créé en mémoire sur lequel l'échange est effectué avec compression), implémente la possibilité de reconditionner les pages à l'aide d'un algorithme alternatif pour atteindre un niveau plus élevé. de compression. L'idée principale est de donner le choix entre plusieurs algorithmes (lzo, lzo-rle, lz4, lz4hc, zstd), offrant leurs propres compromis entre vitesse de compression/décompression et niveau de compression, ou optimaux dans des situations particulières (par exemple pour compresser de gros volumes). pages mémoire).
    • Ajout de l'API "iommufd" pour gérer le système de gestion de la mémoire E/S - IOMMU (I/O Memory-Management Unit) depuis l'espace utilisateur. La nouvelle API permet de gérer les tables de pages mémoire d'E/S à l'aide de descripteurs de fichiers.
    • BPF offre la possibilité de créer des types, de définir vos propres objets, de créer votre propre hiérarchie d'objets et de créer de manière flexible vos propres structures de données, telles que des listes chaînées. Pour les programmes BPF passant en mode veille (BPF_F_SLEEPABLE), la prise en charge des verrous bpf_rcu_read_{,un}lock() a été ajoutée. Prise en charge implémentée pour la sauvegarde des objets task_struct. Ajout du type de carte BPF_MAP_TYPE_CGRP_STORAGE, fournissant un stockage local pour les groupes de contrôle.
    • Pour le mécanisme de blocage RCU (Read-copy-update), un mécanisme optionnel d'appels de rappel « paresseux » est implémenté, dans lequel plusieurs appels de rappel sont traités à la fois à l'aide d'une minuterie en mode batch. L'application de l'optimisation proposée nous permet de réduire la consommation d'énergie des appareils Android et ChromeOS de 5 à 10 % en reportant les demandes RCU pendant les périodes d'inactivité ou de faible charge sur le système.
    • Ajout de sysctl split_lock_mitigate pour contrôler la façon dont le système réagit lorsqu'il détecte des verrous fractionnés qui se produisent lors de l'accès à des données non alignées en mémoire en raison du croisement de données entre deux lignes de cache du processeur lors de l'exécution d'une instruction atomique. De tels blocages entraînent une baisse significative des performances. La définition de split_lock_mitigate sur 0 émet uniquement un avertissement indiquant qu'il y a un problème, tandis que la définition de split_lock_mitigate sur 1 entraîne également le ralentissement du processus qui a provoqué le verrouillage afin de préserver les performances du reste du système.
    • Une nouvelle implémentation de qspinlock a été proposée pour l'architecture PowerPC, qui démontre des performances supérieures et résout certains problèmes de verrouillage qui surviennent dans des cas exceptionnels.
    • Le code de gestion des interruptions MSI (Message-Signaled Interrupts) a été retravaillé, éliminant les problèmes architecturaux accumulés et ajoutant la prise en charge de la liaison des gestionnaires individuels à différents appareils.
    • Pour les systèmes basés sur l'architecture de jeu d'instructions LoongArch utilisée dans les processeurs Loongson 3 5000 et implémentant le nouveau RISC ISA, similaire à MIPS et RISC-V, la prise en charge des modes ftrace, protection de pile, veille et veille est implémentée.
    • La possibilité d'attribuer des noms à des zones de mémoire anonyme partagée a été fournie (auparavant, les noms ne pouvaient être attribués qu'à une mémoire privée anonyme affectée à un processus spécifique).
    • Ajout d'un nouveau paramètre de ligne de commande du noyau « trace_trigger », conçu pour activer un déclencheur de trace utilisé pour lier des commandes conditionnelles appelées lorsqu'une vérification de contrôle est déclenchée (par exemple, trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Les exigences pour la version du package binutils ont été augmentées. La construction du noyau nécessite désormais au moins binutils 2.25.
    • Lors de l'appel à exec(), la possibilité de placer un processus dans un espace de noms temporel, dans lequel l'heure diffère de l'heure système, a été ajoutée.
    • Nous avons commencé à transférer des fonctionnalités supplémentaires de la branche Rust-for-Linux liées à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules du noyau. La prise en charge de Rust est désactivée par défaut et n'entraîne pas l'inclusion de Rust en tant que dépendance requise pour la construction du noyau. Les fonctionnalités de base proposées dans la dernière version sont étendues pour prendre en charge le code de bas niveau, tel que le type Vec et les macros pr_debug!(), pr_cont!() et pr_alert!(), ainsi que la macro procédurale « #[vtable ] », ce qui simplifie le travail avec les tables de pointeurs sur les fonctions. L'ajout de liaisons Rust de haut niveau sur les sous-systèmes du noyau, qui permettront la création de pilotes à part entière dans Rust, est attendu dans les prochaines versions.
    • Le type "char" utilisé dans le noyau est désormais déclaré non signé par défaut pour toutes les architectures.
    • Le mécanisme d'allocation de mémoire slab - SLOB (slab allocator), conçu pour les systèmes dotés d'une petite quantité de mémoire, a été déclaré obsolète. Au lieu de SLOB, dans des conditions normales, il est recommandé d'utiliser SLUB ou SLAB. Pour les systèmes disposant d'une petite quantité de mémoire, il est recommandé d'utiliser SLUB en mode SLUB_TINY.
  • Sous-système de disque, E/S et systèmes de fichiers
    • Des améliorations ont été apportées à Btrfs visant à résoudre le problème du « trou d'écriture » dans les implémentations RAID 5/6 (une tentative de restauration d'un RAID si un crash se produit pendant l'écriture et qu'il est impossible de comprendre quel bloc sur quel périphérique RAID a été écrit correctement, pouvant conduire à la destruction de blocs, correspondant aux blocs souscrits). De plus, les disques SSD activent désormais automatiquement les opérations de suppression asynchrones par défaut lorsque cela est possible, ce qui permet d'améliorer les performances grâce au regroupement efficace des opérations de suppression dans des files d'attente et au traitement de la file d'attente par un processeur en arrière-plan. Amélioration des performances des opérations d'envoi et de recherche, ainsi que de l'ioctl FIEMAP.
    • Les capacités de gestion de l'écriture différée (réécriture, sauvegarde en arrière-plan des données modifiées) pour les périphériques blocs ont été étendues. Dans certaines situations, comme lors de l'utilisation de périphériques de bloc réseau ou de clés USB, les écritures paresseuses peuvent entraîner une consommation importante de RAM. Afin de contrôler le comportement des écritures paresseuses et de maintenir la taille du cache des pages dans certaines limites, de nouveaux paramètres strict_limit, min_bytes, max_bytes, min_ratio_fine et max_ratio_fine ont été introduits dans sysfs (/sys/class/bdi/).
    • Le système de fichiers F2FS implémente une opération ioctl de remplacement atomique, qui vous permet d'écrire des données dans un fichier en une seule opération atomique. F2FS ajoute également un cache d'étendue de bloc pour aider à identifier les données activement utilisées ou les données qui n'ont pas été consultées depuis longtemps.
    • Dans ext4 FS, seules les corrections d'erreurs sont notées.
    • Le système de fichiers ntfs3 offre plusieurs nouvelles options de montage : « nocase » pour contrôler la sensibilité à la casse dans les noms de fichiers et de répertoires ; windows_name pour interdire la création de noms de fichiers contenant des caractères non valides pour Windows ; hide_dot_files pour contrôler l'attribution de l'étiquette de fichier caché pour les fichiers commençant par un point.
    • Le système de fichiers Squashfs implémente une option de montage « threads= », qui permet de définir le nombre de threads pour paralléliser les opérations de décompression. Squashfs a également introduit la possibilité de mapper les ID utilisateur des systèmes de fichiers montés, utilisés pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec un autre utilisateur sur le système actuel.
    • L'implémentation des listes de contrôle d'accès POSIX (POSIX ACL) a été retravaillée. La nouvelle implémentation élimine les problèmes d'architecture, simplifie la maintenance de la base de code et introduit des types de données plus sécurisés.
    • Le sous-système fscrypt, utilisé pour le cryptage transparent des fichiers et des répertoires, prend désormais en charge l'algorithme de cryptage SM4 (norme chinoise GB/T 32907-2016).
    • La possibilité de construire le noyau sans le support de NFSv2 a été fournie (à l'avenir, ils prévoient d'arrêter complètement le support de NFSv2).
    • L'organisation de la vérification des droits d'accès aux appareils NVMe a été modifiée. Offre la possibilité de lire et d'écrire sur un périphérique NVMe si le processus d'écriture a accès au fichier dédié du périphérique (auparavant, le processus devait avoir l'autorisation CAP_SYS_ADMIN).
    • Suppression du pilote du package CD/DVD, qui était obsolète en 2016.
  • Virtualisation et sécurité
    • Une nouvelle méthode de protection contre la vulnérabilité Retbleed a été implémentée dans les processeurs Intel et AMD, utilisant le suivi de la profondeur des appels, qui ne ralentit pas autant le travail que la protection précédente contre Retbleed. Pour activer le nouveau mode, le paramètre de ligne de commande du noyau « retbleed=stuff » a été proposé.
    • Ajout d'un mécanisme hybride de protection du flux d'instructions FineIBT, combinant l'utilisation d'instructions matérielles Intel IBT (Indirect Branch Tracking) et la protection logicielle kCFI (kernel Control Flow Integrity) pour bloquer la violation de l'ordre d'exécution normal (flux de contrôle) suite à l'utilisation d'exploits qui modifient les pointeurs stockés en mémoire sur les fonctions. FineIBT permet l'exécution par saut indirect uniquement dans le cas d'un saut vers l'instruction ENDBR, qui est placée au tout début de la fonction. De plus, par analogie avec le mécanisme kCFI, les hachages sont ensuite vérifiés pour garantir l'immuabilité des pointeurs.
    • Ajout de restrictions pour bloquer les attaques qui manipulent la génération d'états « oups », après quoi les tâches problématiques sont terminées et l'état est restauré sans arrêter le système. Avec un très grand nombre d'appels à l'état "oops", un débordement du compteur de références se produit (refcount), ce qui permet d'exploiter les vulnérabilités provoquées par les déréférences de pointeurs NULL. Pour se protéger contre de telles attaques, une limite a été ajoutée au noyau pour le nombre maximum de déclencheurs « oups », après quoi le noyau initiera une transition vers l'état « panique » suivie d'un redémarrage, ce qui ne permettra pas d'atteindre l'état « panique ». nombre d'itérations requis pour dépasser le refcount. Par défaut, la limite est fixée à 10 XNUMX « oups », mais si vous le souhaitez, elle peut être modifiée via le paramètre oops_limit.
    • Ajout des paramètres de configuration LEGACY_TIOCSTI et sysctl Legacy_tiocsti pour désactiver la possibilité de mettre des données dans le terminal à l'aide de l'ioctl TIOCSTI, car cette fonctionnalité peut être utilisée pour remplacer des caractères arbitraires dans le tampon d'entrée du terminal et simuler une entrée utilisateur.
    • Un nouveau type de structure interne, encoded_page, est proposé, dans lequel les bits inférieurs du pointeur sont utilisés pour stocker des informations supplémentaires utilisées pour se protéger contre le déréférencement accidentel du pointeur (si le déréférencement est réellement nécessaire, ces bits supplémentaires doivent d'abord être effacés). .
    • Sur la plateforme ARM64, au stade du démarrage, il est possible d'activer ou de désactiver l'implémentation logicielle du mécanisme Shadow Stack, qui permet de se protéger 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 le transfert du contrôle à la fonction et de récupérer l'adresse donnée avant de quitter la fonction). La prise en charge des implémentations matérielles et logicielles de Shadow Stack dans un seul assemblage de noyau vous permet d'utiliser un seul noyau sur différents systèmes ARM, quelle que soit leur prise en charge des instructions d'authentification du pointeur. L'inclusion d'une implémentation logicielle s'effectue par substitution des instructions nécessaires dans le code lors du chargement.
    • Ajout de la prise en charge de l'utilisation du mécanisme de notification de sortie asynchrone sur les processeurs Intel, qui permet de détecter les attaques en une seule étape sur le code exécuté dans les enclaves SGX.
    • Un ensemble d'opérations est proposé qui permet à l'hyperviseur de prendre en charge les requêtes des systèmes invités Intel TDX (Trusted Domain Extensions).
    • Les paramètres de construction du noyau RANDOM_TRUST_BOOTLOADER et RANDOM_TRUST_CPU ont été supprimés, au profit des options de ligne de commande correspondantes random.trust_bootloader et random.trust_cpu.
    • Le mécanisme Landlock, qui permet de limiter l'interaction d'un groupe de processus avec l'environnement externe, a ajouté le support du drapeau LANDLOCK_ACCESS_FS_TRUNCATE, qui permet de contrôler l'exécution des opérations de troncature de fichiers.
  • Sous-système réseau
    • Pour IPv6, la prise en charge du PLB (Protective Load Balancing) a été ajoutée, un mécanisme d'équilibrage de charge entre les liaisons réseau visant à réduire les points de surcharge sur les commutateurs des centres de données. En modifiant l'étiquette de flux IPv6, le PLB modifie de manière aléatoire les chemins de paquets pour équilibrer la charge sur les ports du commutateur. Pour réduire la réorganisation des paquets, cette opération est effectuée autant que possible après des périodes d'inactivité. L'utilisation du PLB dans les centres de données Google a réduit le déséquilibre de charge sur les ports de commutation de 60 % en moyenne, la perte de paquets de 33 % et la latence de 20 %.
    • Ajout d'un pilote pour les appareils MediaTek prenant en charge Wi-Fi 7 (802.11be).
    • Ajout de la prise en charge des liens 800 Gigabits.
    • Ajout de la possibilité de renommer les interfaces réseau à la volée, sans arrêter le travail.
    • Une mention de l'adresse IP à laquelle le paquet est arrivé a été ajoutée aux messages de journal concernant l'inondation SYN.
    • Pour UDP, la possibilité d'utiliser des tables de hachage distinctes pour différents espaces de noms réseau a été implémentée.
    • Pour les ponts réseau, la prise en charge de la méthode d'authentification MAB (MAC Authentication Bypass) a été implémentée.
    • Pour le protocole CAN (CAN_RAW), la prise en charge du mode socket SO_MARK a été implémentée pour attacher des filtres de trafic basés sur fwmark.
    • ipset implémente un nouveau paramètre bitmask qui vous permet de définir un masque basé sur des bits arbitraires dans l'adresse IP (par exemple, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Ajout de la prise en charge du traitement des en-têtes internes dans les paquets tunnelés vers nf_tables.
  • équipement
    • Le sous-système « accel » a été ajouté avec la mise en œuvre d'un cadre pour les accélérateurs de calcul, qui peuvent être fournis soit sous forme d'ASIC individuels, soit sous forme de blocs IP à l'intérieur des SoC et des GPU. Ces accélérateurs visent principalement à accélérer la résolution des problèmes d’apprentissage automatique.
    • Le pilote amdgpu inclut la prise en charge des composants IP GC, PSP, SMU et NBIO. Pour les systèmes ARM64, la prise en charge de DCN (Display Core Next) est implémentée. La mise en œuvre de la sortie d'écran protégée a été déplacée de DCN10 à DCN21 et peut désormais être utilisée lors de la connexion de plusieurs écrans.
    • Le pilote i915 (Intel) a une prise en charge stabilisée pour les cartes vidéo discrètes Intel Arc (DG2/Alchemist).
    • Le pilote Nouveau prend en charge les GPU NVIDIA GA102 (RTX 30) basés sur l'architecture Ampere. Pour les cartes nva3 (GT215), la possibilité de contrôler le rétroéclairage a été ajoutée.
    • Ajout de la prise en charge des adaptateurs sans fil basés sur les puces Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) et MediaTek MT7996, des interfaces Bluetooth Broadcom BCM4377/4378/4387, ainsi que des contrôleurs Ethernet Motorcomm yt8521 et NVIDIA Tegra GE.
    • Ajout de la prise en charge ASoC (ALSA System on Chip) pour les puces sonores intégrées HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Ajout de la prise en charge de l'interface audio Focusrite Saffire Pro 40. Ajout du codec audio Realtek RT1318.
    • Ajout de la prise en charge des smartphones et tablettes Sony (Xperia 10 IV, 5 IV, X et X compacts, OnePlus One, 3, 3T et Nord N100, Xiaomi Poco F1 et Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Ajout de la prise en charge de ARM SoC et Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) cartes, SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 6.2 - Linux-libre 6.2-gnu, débarrassée des éléments de firmware et des pilotes contenant des composants propriétaires ou des sections de code, dont la portée est limitée par le fabricant. La nouvelle version nettoie les nouveaux blobs dans le nouveau pilote. Le chargement du blob est désactivé dans les pilotes mt7622, ​​​​mt7996 wifi et bcm4377 bluetooth. Nettoyage des noms de blob dans les fichiers dts pour l'architecture Aarch64. Code de nettoyage des objets blob mis à jour dans divers pilotes et sous-systèmes. Arrêt du nettoyage du pilote s5k4ecgx, car il a été supprimé du noyau.

Source: opennet.ru

Ajouter un commentaire