Version du noyau Linux 5.11

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 5.11. Parmi les changements les plus notables : le support des enclaves Intel SGX, un nouveau mécanisme d'interception des appels système, un bus auxiliaire virtuel, l'interdiction d'assembler des modules sans MODULE_LICENSE(), un mode de filtrage rapide des appels système dans seccomp, la fin du support du Architecture ia64, transfert de la technologie WiMAX vers la branche « staging », possibilité d'encapsuler SCTP en UDP.

La nouvelle version comprend 15480 1991 correctifs provenant de 72 12090 développeurs, la taille du correctif est de 868025 Mo (les modifications ont affecté 261456 46 fichiers, 5.11 16 lignes de code ont été ajoutées, 13 3 lignes ont été supprimées). Environ 4 % 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.

Principales nouveautés :

  • Sous-système de disque, E/S et systèmes de fichiers
    • Plusieurs options de montage ont été ajoutées à Btrfs pour être utilisées lors de la restauration de données à partir d'un système de fichiers endommagé : "rescue=ignorebadroots" pour le montage, malgré les dommages causés à certaines arborescences racines (étendue, uuid, relocalisation des données, périphérique, csum, espace libre), " Rescue=ignoredatacsums” pour désactiver la vérification de la somme de contrôle des données et “rescue=all” pour activer simultanément les modes 'ignorebadroots', 'ignoredatacsums' et 'nologreplay'. L'option de montage "inode_cache", qui était auparavant obsolète, a été abandonnée. Le code a été préparé pour implémenter la prise en charge des blocs avec des métadonnées et des données inférieures à une taille de page (PAGE_SIZE), ainsi que la prise en charge du mode d'allocation d'espace zoné. Les requêtes sans tampon (Direct IO) ont été déplacées vers l'infrastructure iomap. Les performances d'un certain nombre d'opérations ont été optimisées ; dans certains cas, l'accélération peut atteindre des dizaines de pour cent.
    • XFS implémente l'indicateur « needsrepair », qui signale la nécessité d'une réparation. Lorsque cet indicateur est défini, le système de fichiers ne peut pas être monté tant que l'indicateur n'est pas réinitialisé par l'utilitaire xfs_repair.
    • Ext4 propose uniquement des corrections de bugs et des optimisations, ainsi qu'un nettoyage de code.
    • La réexportation des systèmes de fichiers montés via NFS est autorisée (c'est-à-dire qu'une partition montée via NFS peut désormais être exportée via NFS et utilisée comme cache intermédiaire).
    • L'appel système close_range(), qui permet à un processus de fermer simultanément une plage entière de descripteurs de fichiers ouverts, a ajouté une option CLOSE_RANGE_CLOEXEC pour fermer les descripteurs en mode fermeture après exécution.
    • Le système de fichiers F2FS ajoute de nouveaux appels ioctl() pour permettre le contrôle de l'espace utilisateur sur les fichiers stockés sous forme compressée. Ajout de l'option de montage "compress_mode=" pour choisir de placer le gestionnaire de compression côté noyau ou dans l'espace utilisateur.
    • Fourni la possibilité de monter Overlayfs par des processus non privilégiés en utilisant un espace de noms utilisateur distinct. Pour vérifier le respect de la mise en œuvre du modèle de sécurité, un audit complet du code a été réalisé. Overlayfs ajoute également la possibilité de s'exécuter en utilisant des copies d'images du système de fichiers en désactivant éventuellement la vérification de l'UUID.
    • Le système de fichiers Ceph a ajouté la prise en charge du protocole msgr2.1, qui permet l'utilisation de l'algorithme AES-GCM lors de la transmission de données sous forme cryptée.
    • Le module dm-multipath implémente la possibilité de prendre en compte l'affinité CPU (« affinité IO ») lors du choix de la route pour les requêtes d'E/S.
  • Services mémoire et système
    • Un nouveau mécanisme d'interception des appels système a été ajouté, basé sur prctl(), qui vous permet de générer des exceptions depuis l'espace utilisateur lors de l'accès à un appel système spécifique et d'émuler son exécution. Cette fonctionnalité est requise dans Wine et Proton pour émuler les appels système Windows, ce qui est nécessaire pour garantir la compatibilité avec les jeux et programmes qui effectuent directement des appels système en contournant l'API Windows (par exemple, pour se protéger contre une utilisation non autorisée).
    • L'appel système userfaultfd(), conçu pour gérer les erreurs de page (accès aux pages de mémoire non allouées) dans l'espace utilisateur, a désormais la capacité de désactiver la gestion des exceptions qui se produisent au niveau du noyau pour rendre plus difficile l'exploitation de certaines vulnérabilités.
    • Le sous-système BPF a ajouté la prise en charge du stockage local des tâches, qui fournit une liaison de données à un gestionnaire BPF spécifique.
    • La comptabilité de la consommation de mémoire par les programmes BPF a été entièrement repensée - un contrôleur de groupe de contrôle a été proposé à la place de memlock rlimit pour gérer l'utilisation de la mémoire dans les objets BPF.
    • Le mécanisme BTF (BPF Type Format), qui fournit des informations de vérification de type dans le pseudocode BPF, prend en charge les modules du noyau.
    • Ajout de la prise en charge des appels système shutdown(), renameat2() et unlinkat() à l'interface d'E/S asynchrone io_uring. Lors de l'appel de io_uring_enter(), la possibilité de spécifier un délai d'attente a été ajoutée (vous pouvez vérifier la prise en charge de l'argument pour spécifier un délai d'attente en utilisant l'indicateur IORING_FEAT_EXT_ARG).
    • L'architecture ia64 utilisée dans les processeurs Intel Itanium a été déplacée vers la catégorie orpheline, ce qui signifie que les tests ont été interrompus. Hewlett Packard Enterprise a cessé d'accepter des commandes de nouveaux équipements Itanium, et Intel a fait de même l'année dernière.
    • La prise en charge des systèmes basés sur l'architecture MicroBlaze qui n'incluent pas d'unité de gestion de mémoire (MMU) a été interrompue. De tels systèmes n’ont pas été vus dans la vie quotidienne depuis longtemps.
    • Pour l'architecture MIPS, la prise en charge des tests de couverture de code a été ajoutée à l'aide de l'utilitaire gcov.
    • Ajout de la prise en charge du bus auxiliaire virtuel pour l'interface avec des périphériques multifonctions combinant des fonctionnalités nécessitant différents pilotes (par exemple, des cartes réseau avec prise en charge Ethernet et RDMA). Le bus peut être utilisé pour attribuer un pilote principal et secondaire à un périphérique, dans les situations où l'utilisation du sous-système MFD (Multi-Function Devices) est problématique.
    • Pour l'architecture RISC-V, la prise en charge du système d'allocation de mémoire CMA (Contiguous Memory Allocator) a été ajoutée, qui est optimisé pour allouer de grandes zones de mémoire contiguës à l'aide de techniques de déplacement de pages mémoire. Pour RISC-V, des outils sont également implémentés pour limiter l'accès à /dev/mem et prendre en compte le temps de traitement des interruptions.
    • Pour les systèmes ARM 32 bits, la prise en charge de l'outil de débogage KASan (Kernel Address Sanitizer) a été ajoutée, qui permet d'identifier les erreurs lors de l'utilisation de la mémoire. Pour ARM 64 bits, l'implémentation de KASan a été convertie pour utiliser des balises MTE (MemTag).
    • Ajout de l'appel système epoll_pwait2() pour autoriser des délais d'attente avec une précision de la nanoseconde (l'appel epoll_wait manipule les millisecondes).
    • Le système de build affiche désormais une erreur lors de la tentative de build de modules de noyau chargeables dans lesquels la licence de code n'est pas définie à l'aide de la macro MODULE_LICENSE(). Désormais, l'utilisation de la macro EXPORT_SYMBOL() pour les fonctions statiques provoquera également une erreur de build.
    • Ajout de la prise en charge du mappage des objets GEM à partir de la mémoire utilisée pour les E/S, ce qui a permis d'accélérer le travail avec le framebuffer sur certaines architectures.
    • Kconfig a abandonné le support de Qt4 (tout en conservant le support de Qt5, GTK et Ncurses).
  • Virtualisation et sécurité
    • La prise en charge d'un mode de réponse rapide a été ajoutée à l'appel système seccomp(), ce qui vous permet de déterminer très rapidement si un certain appel système est autorisé ou interdit en fonction du bitmap à action constante attaché au processus, qui ne nécessite pas d'exécution. un gestionnaire BPF.
    • Composants de noyau intégrés pour créer et gérer des enclaves basées sur la technologie Intel SGX (Software Guard eXtensions), qui permet aux applications d'exécuter du code dans des zones de mémoire cryptées isolées, auxquelles le reste du système a un accès limité.
    • Dans le cadre d'une initiative visant à limiter l'accès depuis l'espace utilisateur au MSR (registre spécifique au modèle), écriture dans le registre MSR_IA32_ENERGY_PERF_BIAS, qui permet de changer le mode d'efficacité énergétique du processeur (« normal », « performance », « powersave ») , est interdit.
    • La possibilité de désactiver la migration des tâches hautement prioritaires entre les processeurs a été déplacée de la branche kernel-rt pour les systèmes temps réel.
    • Pour les systèmes ARM64, la possibilité d'utiliser des balises MTE (MemTag, Memory Tagging Extension) pour les adresses mémoire du gestionnaire de signaux a été ajoutée. L'utilisation de MTE est activée en spécifiant l'option SA_EXPOSE_TAGBITS dans sigaction() et permet de vérifier l'utilisation correcte des pointeurs pour bloquer l'exploitation des vulnérabilités provoquées par l'accès à des blocs mémoire déjà libérés, les débordements de tampon, les accès avant initialisation et l'utilisation en dehors du contexte actuel.
    • Ajout du paramètre "DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING", qui permet au sous-système dm-verity de vérifier les signatures de hachage des certificats placés dans le trousseau secondaire. En pratique, le setup permet de vérifier non seulement les certificats intégrés au noyau, mais également les certificats chargés lors du fonctionnement, ce qui permet de mettre à jour les certificats sans mettre à jour l'ensemble du noyau.
    • Linux en mode utilisateur a ajouté la prise en charge du mode veille, qui vous permet de geler l'environnement et d'utiliser le signal SIGUSR1 pour sortir du mode veille.
    • Le mécanisme virtio-mem, qui vous permet de brancher et de déconnecter à chaud de la mémoire sur des machines virtuelles, a ajouté la prise en charge du mode Big Block (BBM), qui permet de transférer ou de prendre de la mémoire en blocs plus grands que la taille de la mémoire du noyau. bloc, qui est nécessaire pour optimiser VFIO dans QEMU.
    • La prise en charge du chiffrement CHACHA20-POLY1305 a été ajoutée à l'implémentation noyau de TLS.
  • Sous-système réseau
    • Pour le 802.1Q (VLAN), un mécanisme de gestion des échecs de connexion (CFM, Connectivity Fault Management) a été mis en place, qui permet d'identifier, de vérifier et d'isoler les échecs dans les réseaux avec des ponts virtuels (Virtual Bridged Networks). Par exemple, CFM peut être utilisé pour isoler des problèmes dans des réseaux couvrant plusieurs organisations indépendantes dont les employés n'ont accès qu'à leur propre équipement.
    • Ajout de la prise en charge de l'encapsulation des paquets de protocole SCTP dans des paquets UDP (RFC 6951), ce qui vous permet d'utiliser SCTP sur des réseaux avec des traducteurs d'adresses plus anciens qui ne prennent pas directement en charge SCTP, ainsi que d'implémenter SCTP sur des systèmes qui ne fournissent pas d'accès direct à l'IP. couche.
    • La mise en œuvre de la technologie WiMAX a été déplacée vers le stade intermédiaire et devrait être supprimée à l'avenir si aucun utilisateur n'a besoin de WiMAX. WiMAX n'est plus utilisé dans les réseaux publics et dans le noyau, le seul pilote avec lequel WiMAX peut être utilisé est le pilote Intel 2400m obsolète. La prise en charge WiMAX a été interrompue dans le configurateur réseau NetworkManager en 2015. Actuellement, WiMax est presque entièrement remplacé par des technologies telles que LTE, HSPA+ et Wi-Fi 802.11n.
    • Des travaux ont été effectués pour optimiser les performances de traitement du trafic TCP entrant en mode zéro copie, c'est-à-dire sans copie supplémentaire vers de nouveaux tampons. Pour un trafic de taille moyenne, couvrant des dizaines ou plusieurs centaines de kilo-octets de données, l'utilisation de zerocopy au lieu de recvmsg() est nettement plus efficace. Par exemple, les modifications mises en œuvre ont permis d'augmenter de 32 à 60 % l'efficacité du traitement du trafic de type RPC avec des messages de 70 Ko lors de l'utilisation de zéro copie.
    • Ajout de nouveaux appels ioctl() pour créer des ponts réseau couvrant plusieurs liens PPP. La capacité proposée permet aux trames de passer d'un canal à un autre, par exemple d'une session PPPoE à une session PPPoL2TP.
    • Intégration au cœur de MPTCP (MultiPath TCP), une extension du protocole TCP permettant d'organiser le fonctionnement d'une connexion TCP avec acheminement de paquets simultanément sur plusieurs routes via différentes interfaces réseau associées à différentes adresses IP. La nouvelle version introduit la prise en charge de l'option ADD_ADDR pour annoncer les adresses IP disponibles auxquelles il est possible de se connecter lors de l'ajout de nouveaux flux à une connexion MPTCP existante.
    • Ajout de la possibilité de configurer des actions lorsque le budget d'interrogation de connexion est dépassé (busy-polling). Le mode SO_BUSY_POLL précédemment disponible impliquait de passer à softirq lorsque le budget était épuisé. Pour les applications qui doivent continuer à utiliser le polling, une nouvelle option SO_PREFER_BUSY_POLL est proposée.
    • IPv6 implémente la prise en charge des modes SRv6 End.DT4 et End.DT6, utilisés pour créer des VPN IPv4 L3 multi-utilisateurs et des périphériques VRF (Virtual Routing and Forwarding).
    • Netfilter a unifié l'implémentation des expressions d'ensemble, ce qui a permis de spécifier plusieurs expressions pour chaque élément des listes d'ensembles.
    • Des API ont été ajoutées à la pile sans fil 802.11 pour configurer les limites de puissance SAR, ainsi que les paramètres AE PWE et HE MCS. Le pilote Intel iwlwifi a ajouté la prise en charge de la gamme 6 GHz (Ultra High Band). Le pilote Qualcomm Ath11k a ajouté la prise en charge de la technologie FILS (Fast Initial Link Setup, standardisée comme IEEE 802.11ai), qui vous permet de vous débarrasser des délais d'itinérance lors de la migration d'un point d'accès à un autre.
  • équipement
    • Le pilote amdgpu prend en charge l'APU AMD « Green Sardine » (Ryzen 5000) et le GPU « Dimgrey Cavefish » (Navi 2), ainsi qu'une prise en charge initiale de l'APU AMD Van Gogh avec cœur Zen 2 et GPU RDNA 2 (Navi 2). Ajout de la prise en charge des nouveaux identifiants APU Renoir (basés sur le processeur Zen 2 et le GPU Vega).
    • Le pilote i915 pour cartes vidéo Intel prend en charge la technologie IS (Integer scaling) avec la mise en œuvre d'un filtre pour augmenter l'échelle prenant en compte l'état des pixels voisins (interpolation du voisin le plus proche) pour déterminer la couleur des pixels manquants. La prise en charge des cartes Intel DG1 discrètes a été étendue. La prise en charge de la technologie « Big Joiner » a été implémentée, présente depuis les puces Ice Lake / Gen11 et permet d'utiliser un transcodeur pour traiter deux flux, par exemple pour la sortie sur un écran 8K via un DisplayPort. Ajout d'un mode pour basculer de manière asynchrone entre deux tampons dans la mémoire vidéo (async flip).
    • Le nouveau pilote a ajouté la prise en charge initiale des GPU NVIDIA basés sur la microarchitecture Ampere (GA100, GeForce RTX 30xx), jusqu'ici limitée aux outils de contrôle des modes vidéo.
    • Ajout de la prise en charge du protocole 3WIRE utilisé dans les panneaux LCD. Ajout de la prise en charge des panneaux novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 et ABT Y030XX067A 3.0. Par ailleurs, on peut noter le support du panel des smartphones OnePlus 6 et 6T, qui permettait d'organiser le chargement d'un noyau non modifié sur les appareils.
    • Ajout de la prise en charge du premier contrôleur hôte USB4 discret d'Intel, Maple Ridge.
    • Ajout de la prise en charge des codecs audio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI et XCVR, Realtek RT715 et Qualcomm SM8250.
    • Ajout de la prise en charge des cartes, appareils et plates-formes ARM : Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, ​​​​Mikrotik basé sur Marvell Prestera 98DX3236, serveurs avec Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, Chromebook « Trogdor », Kobol Helios64, Engicam PX30.Core.
    • Prise en charge intégrée de la console de jeu Ouya basée sur NVIDIA Tegra 3.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau 5.11 entièrement libre - Linux-libre 5.11-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 pour qat_4xxx (crypto), lt9611uxcm (pont dsi/hdmi), ccs/smia++ (capteur), ath11k_pci, émetteur-récepteur audio nxp et contrôleur mhi pci. Code de nettoyage des objets blob mis à jour dans les pilotes et sous-systèmes amdgpu, btqca, btrtl, btusb, i915 csr. Nouveaux blobs désactivés dans m3 rproc, idt82p33 ptp clock et qualcomm arm64.

Source: opennet.ru

Ajouter un commentaire