Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 5.13. Parmi les changements les plus notables : le système de fichiers EROFS, le support initial des puces Apple M1, le contrôleur cgroup "misc", l'arrêt du support de /dev/kmem, le support des nouveaux GPU Intel et AMD, la possibilité d'appeler directement des fonctions du noyau à partir de programmes BPF, la randomisation de la pile du noyau pour chaque appel système, la possibilité de compiler avec Clang en protégeant CFI (Contrôle de Flux d'Intégrité), le module LSM Landlock pour des restrictions supplémentaires sur les processus, un périphérique audio virtuel basé sur virtio, et le mode multi-shot dans io_uring.
La nouvelle version comprend 17189 corrections de 2150 développeurs (le plus grand de l'histoire), la taille du patch étant de 60 Mo (les changements ont concerné 12996 fichiers, 794705 lignes de code ajoutées et 399590 lignes supprimées). Environ 47 % de tous les changements présentés dans la version 5.13 sont liés aux pilotes de périphériques, environ 14 % concernent la mise à jour de code spécifique aux architectures matérielles, 13 % sont liés à la pile réseau, 5 % aux systèmes de fichiers et 4 % aux sous-systèmes internes du noyau.
Les principales nouveautés :
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Le support du système de fichiers EROFS (Enhanced Read-Only File System), proposé par Huawei pour une utilisation sur des partitions en mode lecture seule, a été ajouté. Le nouveau FS supporte le stockage de données de manière compressée et, comparé à Ext4, montre des performances similaires lors des opérations de lecture séquentielle, mais dépasse largement Ext4 lors de l'accès aléatoire aux données. Par exemple, avec un taux de compression de 4 et des tests sur le serveur un disque dur, le FS EROFS a surpassé Ext4 dans les opérations de lecture aléatoire de plus de six fois, et lors de l'utilisation d'un smartphone Android avec Flash, presque trois fois. Comme dans d'autres FS en lecture seule, la structure d'EROFS est considérablement simplifiée en raison de la suppression de certaines zones de métadonnées dans sa mise en œuvre, comme la carte de blocs libres.
- Pour le système de fichiers SMB3, une option de montage "rasize" a été implémentée, permettant de définir la taille de la fenêtre de prélecture (readahead) afin d'améliorer les performances de certains types de charges.
- Dans le FS ext4, la réécriture des éléments de répertoires lors de la suppression de fichiers a été assurée. Dans ext4, l'utilisation simultanée du mode non sensible à la casse et du chiffrement est également autorisée.
- Dans le système de fichiers exFAT, une prise en charge de la commande ioctl FITRIM (discard) a été ajoutée, pour informer le disque des blocs inutilisés dans le système de fichiers.
- Dans le système de fichiers XFS, la possibilité de récupérer de l'espace à partir du dernier groupe de distribution a été introduite, ce qui constitue la première étape vers la mise en œuvre d'une fonction de réduction de la taille des partitions existantes avec XFS.
- Un nouvel appel système quotactl_path a été ajouté, qui se distingue de quotactl en ce qu'il permet de gérer les quotas non pas via un fichier de périphérique spécial, mais en spécifiant le chemin du point de montage du système de fichiers.
- Dans le mécanisme fanotify, les capacités disponibles pour les utilisateurs non privilégiés ont été étendues. Par exemple, de manière similaire à inotify, sans les droits SYS_CAP_ADMIN, il est désormais possible de suivre des événements OPEN, ACCESS, MODIFY et CLOSE pour des fichiers et des répertoires.
- Mémoire et services système
- Un nouveau contrôleur cgroup a été ajouté — «Misc» (CONFIG_CGROUP_MISC), conçu pour limiter et suivre les ressources scalaires, pouvant être gérées à l'aide d'un simple compteur et limitées en définissant des valeurs maximales autorisées. Un exemple d'application de ce nouveau contrôleur cgroup mentionne la gestion des identifiants d'espace d'adresses utilisés dans le mécanisme AMD SEV (Secure Encrypted Virtualization).
- Dans l'interface d'E/S asynchrone io_uring, un mode «multi-shot» a été implémenté pour les demandes POLL, dans lequel POLL n'est pas supprimé après la génération d'un événement, mais reste actif et peut générer plusieurs événements.
- Le code assurant le traitement des interruptions générées par le logiciel dans les threads du noyau a été transféré depuis la branche realtime du noyau, ce qui permet de les évincer par des processus de priorité plus élevée.
- Une bibliothèque interne netfs a été ajoutée, dans laquelle les fonctions types utilisées dans les systèmes de fichiers en réseau ont été extraites.
- Pour l'architecture PowerPC, un support des espaces de noms temporels (time namespaces) a été mis en œuvre, permettant d'utiliser son propre temps dans un conteneur.
- Pour l'architecture RISC-V, le support de kexec, crash dump, kprobe et l'exécution du noyau in situ (execute-in-place, exécution à partir du support d'origine sans copie en RAM) a été mis en œuvre.
- Dans les programmes de traçage BPF, il est désormais possible d'utiliser un stockage de données local à la tâche (task-local storage), offrant de meilleures performances grâce à la liaison des données à un gestionnaire BPF spécifique.
- Un nouveau mécanisme a été mis en œuvre pour appeler directement des fonctions du noyau à partir de programmes BPF, qui est déjà utilisé dans la mise en œuvre des algorithmes de surcharge TCP. Pour des raisons de sécurité, les fonctions appelées doivent être explicitement définies dans une liste blanche.
- Une option func-no-repeats a été ajoutée au système de traçage de fonctions ftrace, permettant de représenter les appels consécutifs répétitifs d'une fonction sous forme de compteur.
- L'appel système userfaultfd(), destiné à traiter les défauts de page (accès à des pages mémoire non allouées) dans l'espace utilisateur, a été amélioré pour permettre la gestion des défauts partiels, où la page mémoire est présente mais il n'y a pas d'entrée dans la table des pages mémoire.
- Le support du fichier spécial /dev/kmem, par lequel il est possible d'accéder à tout l'espace d'adresse du noyau, a été supprimé. Ce fichier a été jugé obsolète et source de problèmes de sécurité.
- Un nouveau pilote de gestion de la dissipation thermique a été mis en œuvre pour les puces Intel, permettant de réduire la fréquence du processeur en cas de risque de surchauffe. Contrairement au mécanisme d'activation TCC (Thermal Control Circuit) existant, le nouveau pilote manipule les valeurs relatives, c'est-à-dire qu'il peut réduire la fréquence au début d'une augmentation significative de température, sans attendre d'atteindre un seuil critique.
- Virtualisation et sécurité
- Le module LSM d'isolation des applications Landlock a été intégré, permettant de limiter l'interaction avec l'environnement externe d'un groupe de processus, et conçu en tenant compte de mécanismes d'isolation tels que XNU Sandbox, FreeBSD Capsicum et OpenBSD Pledge/Unveil. La logique d'octroi d'accès est définie à l'aide d'un programme BPF, mais contrairement à seccomp-bpf, Landlock ne filtre pas les appels système et leurs arguments, mais permet de restreindre l'utilisation d'objets du noyau, tels que les hiérarchies de fichiers. Avec Landlock, tout processus, y compris ceux n'ayant pas de privilèges, peut s'isoler de manière fiable et empêcher le contournement de l'isolation en cas de détection de vulnérabilités ou de modifications malveillantes dans l'application. Landlock permet au processus de créer des environnements isolés protégés, réalisés sous la forme d'une couche supplémentaire au-dessus des mécanismes de contrôle d'accès existants. Par exemple, un programme peut interdire l'accès aux fichiers en dehors du répertoire de travail.
- Une fonctionnalité de randomisation des décalages dans la pile du noyau lors du traitement des appels système a été ajoutée, dans le but de compliquer les attaques sur la pile. L'essence de cette protection réside dans le choix d'un décalage aléatoire de la pile à chaque appel système, ce qui rend plus difficile la détermination de la disposition de la pile en mémoire, même si des informations sur les adresses sont obtenues, car lors du prochain appel système, l'adresse de base de la pile changera. Pour activer la randomisation, les paramètres du noyau "randomize_kstack_offset=on/off" et la configuration CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT sont proposés. Le surcoût est estimé à environ 1 % de perte de performance.
- Ajout du support pour la compilation du noyau avec l'activation, dans le compilateur Clang, du mécanisme de protection CFI (Integrity de Contrôle de Flux), ajoutant une vérification avant chaque appel indirect de fonction pour identifier certaines formes de comportement indéfini, qui peuvent potentiellement entraîner une rupture de l'ordre d'exécution normal (flux de contrôle) en raison de l'utilisation d'exploits modifiant les pointeurs de fonction stockés en mémoire. Pour activer le CFI, il est proposé le paramètre CONFIG_CFI_CLANG.
- Dans le service fourni par le noyau pour le stockage des clés de chiffrement (key ring), le mécanisme des clés de confiance (Trusted Keys) couvre désormais non seulement les clés provenant des modules TPM, mais également celles provenant des environnements TEE (Trusted Execution Environment). Un paramètre de démarrage "trusted.source" a été proposé pour gérer la source des clés de confiance. De plus, la possibilité de traiter des clés de confiance au format ASN.1 a été ajoutée.
- Un paramètre a été ajouté pour précharger la liste des certificats révoqués lors du démarrage du noyau. Un problème (CVE-2020-26541) a été résolu concernant l'ignorance dans la liste noire des certificats Secure Boot UEFI livrés au format EFI_CERT_X509_GUID, ce qui permettait de démarrer le système avec un certificat révoqué.
- Le sous-système de cryptologie du noyau a ajouté le support de la vérification des signatures numériques ECDSA basées sur des courbes elliptiques.
- La possibilité de vérifier les politiques SELinux via le sous-système IMA (Integrity Measurement Architecture) a été mise en œuvre, assurant le maintien d'une base de hachages pour vérifier l'intégrité des données.
- Sous-système réseau
- Le support de la technologie WiMAX, qui n'est plus utilisée dans les réseaux publics, a été supprimé. Dans le noyau, le seul pilote compatible avec WiMAX reste l'ancien pilote Intel 2400m. Le gestionnaire de réseau NetworkManager a cessé de prendre en charge WiMAX en 2015. Actuellement, WiMAX est pratiquement entièrement remplacé par des technologies telles que LTE, HSPA+ et Wi-Fi 802.11n.
- Ajout d'un pilote pour l'adaptateur réseau MANA (Microsoft Azure Network Adapter).
- Le pilote ath11k a ajouté le support des modules sans fil Qualcomm QCN9074 avec support 802.11ax.
- Le pilote iwlwifi a mis en œuvre la possibilité de scanner passivement les canaux dans la bande de 6 GHz. Pour l'Ukraine, le support de l'activation/désactivation de l'IEEE 802.11ax en fonction des paramètres dans le BIOS a été ajouté.
- L'optimisation du sous-système XDP (eXpress Data Path) a été réalisée, permettant de manipuler les paquets réseau avant leur traitement par la pile réseau du noyau Linux. Les tests réalisés montrent une augmentation des performances de XDP de 4 à 8 %. Pour les appareils virtio, le gain de performance du traitement logiciel AF_XDP peut atteindre 33 %.
- Le support des messages PROBE étendus, définis dans la RFC 8335, a été implémenté dans ICMP.
- L'intégration du noyau MPTCP (MultiPath TCP) se poursuit, une extension du protocole TCP pour gérer les connexions TCP avec la livraison de paquets simultanément par plusieurs chemins à travers différentes interfaces réseau, liées à différentes adresses IPLa nouvelle version a ajouté le support des sockopt pour définir les options TCP types. La possibilité de réinitialiser des sous-flux (subflow) a été mise en œuvre.
- Dans netfilter, le support de la gestion des ressources à l'aide d'une hiérarchie unifiée de cgroups v2 a été ajouté.
- Dans ethtool, une interface pour lire les statistiques IEEE MIB avec le support de mlx5 et bnxt a été mise en place. Les pilotes réseau peuvent extraire des données arbitraires de SFP EEPROM en manipulant les pages de mémoire au lieu de la combinaison décalage+taille.
- Matériel
- Le support initial pour le chip ARM Apple M1 a été mis en œuvre, couvrant le contrôleur d'interruptions, le timer, l'UART, SMP, et des fonctions pour la gestion des entrées/sorties ainsi que le MMIO. L'ingénierie inverse du GPU n'est pas encore terminée, et le support du framebuffer et de la console via le port série est fourni pour l'affichage.
- La purge du noyau des anciens pilotes se poursuit, les pilotes "gasket" (Google ASIC), "sysace", "umem" et plusieurs anciens pilotes pour des ports série ont été supprimés.
- Après 13 ans dans la branche de staging, le pilote "comedi" a été stabilisé et transféré dans le noyau principal pour le support des dispositifs de collecte de données.
- Un pilote GUD (Generic USB Display) a été ajouté, avec l'implémentation d'un pilote de base pour les écrans et les adaptateurs TV connectés via l'interface USB. Ce pilote fournit des propriétés DRM (Direct Rendering Manager) pour la rotation de l'image, le contrôle de la luminosité, l'accès à l'EDID, la configuration des modes vidéo et la connexion de TV, qui peuvent servir de base à la création de pilotes pour des dispositifs spécifiques.
- Un pilote audio « virtio » a été ajouté, avec l'implémentation d'un dispositif audio virtuel pouvant être utilisé dans des systèmes invités pour la sortie et l'enregistrement audio sans passer par la carte son et sans émulation.
- Le pilote amdgpu a ajouté un support initial pour le GPU Aldebaran (gfx90a). Un support initial de la technologie de synchronisation adaptative FreeSync pour HDMI a été inclus (qui était auparavant disponible pour DisplayPort), permettant d'ajuster la fréquence de mise à jour de l'information à l'écran. Le support de l'ASSR (Alternate Scrambler Seed Reset) a été ajouté. Des ioctls pour demander des fonctionnalités liées à l'encodage et au décodage vidéo ont été ajoutés. Le mode CONFIG_DRM_AMD_SECURE_DISPLAY a été introduit pour détecter les changements dans les écrans affichant des informations critiques. Un support du mécanisme d'économie d'énergie ASPM a été ajouté.
- Le pilote i915 pour les cartes graphiques Intel a inclus le support des puces Intel Alderlake-S. Le support de l'eDP MSO (Embedded DisplayPort Multi-SST Operation) a été ajouté.
- Le support du contrôleur de jeu Luna (Amazon) ainsi que des écrans tactiles Hycon HY46XX, ILITEK Lego Series et MStar MSG2638 a été ajouté.
En parallèle, la Fondation latino-américaine pour le logiciel libre a formé une variante entièrement libre du noyau 5.11 — Linux-libre 5.11-gnu, débarrassé des éléments de firmwares et de pilotes contenant des composants non libres ou des segments de code dont l'utilisation est limitée par le fabricant. Dans cette nouvelle version, le nettoyage du pilote comedi a été effectué. Le nettoyage des pilotes cyclades, isicom tty et i2400m wimax a été arrêté, ces derniers ayant été supprimés du noyau. Le code de nettoyage des blobs dans les pilotes et sous-systèmes amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen et qualcomm arm64 a été mis à jour.
Source : opennet.ru
