Sortie du noyau Linux 5.8.

Après deux mois de développement, Linus Torvalds présenté a annoncé la sortie du noyau Linux 5.8. Parmi les changements les plus notables : le détecteur d'états de course KCSAN, un mécanisme universel de livraison de notifications aux utilisateurs, le support du matériel pour le chiffrement inline, des mécanismes de protection avancés pour ARM64, le support du processeur russe Baikal-T1, la possibilité de monter séparément les instances de procfs, et la mise en œuvre pour ARM64 des mécanismes de protection Shadow Call Stack et BTI.

Le noyau 5.8 est devenu le plus important en termes de nombre de changements de tous les noyaux depuis le début du projet. Ces changements ne concernent pas un sous-système en particulier, mais touchent divers aspects du noyau et sont principalement liés à des révisions internes et à un nettoyage. Le plus grand nombre de changements se trouve dans les pilotes. Cette nouvelle version inclut 17 606 corrections de 2 081 développeurs, affectant environ 20 % de tous les fichiers dans le dépôt du code du noyau. La taille du patch est de 65 Mo (les modifications concernent 16 180 fichiers, avec 1 043 240 lignes de code ajoutées et 489 854 lignes supprimées). À titre de comparaison, la branche 5.7 a reçu 15 033 corrections, et la taille du patch était de 39 Mo. Environ 37 % de tous les changements présentés dans 5.8 sont liés aux pilotes de dispositifs, environ 16 % concernent la mise à jour du code spécifique aux architectures matérielles, 11 % sont liés à la pile réseau, 3 % aux systèmes de fichiers et 4 % aux sous-systèmes internes du noyau.

Principales nouveautés:

  • Virtualisation et sécurité
    • La verrouillage du chargement des modules du noyau ayant des sections de code avec des bits autorisant simultanément l'exécution et l'écriture a été garanti. Ce changement a été mis en œuvre dans le cadre d'un projet plus large visant à éliminer l'utilisation par le noyau de pages mémoire permettant à la fois l'exécution et l'écriture.
    • Il est désormais possible de créer des instances distinctes de procfs, permettant d'utiliser plusieurs points de montage procfs, montés avec différentes options, mais reflétant un même espace de noms d'identifiants de processus (pid namespace). Auparavant, tous les points de montage procfs ne reflétaient qu'une seule représentation interne, et toute modification des paramètres de montage impactait tous les autres points de montage liés au même espace de noms d'identifiants de processus. Parmi les domaines où le montage avec différentes options peut être requis, on note la mise en œuvre d'une isolation légère pour les systèmes embarqués, avec la possibilité de masquer dans procfs certains types de processus et de nœuds d'information.
    • Pour la plateforme ARM64, la prise en charge du mécanisme
      Shadow-Call Stack, fourni par le compilateur Clang, a été mise en œuvre pour protéger contre le débordement d'adresse de retour à partir d'une fonction en cas de débordement de tampon dans la pile. Le principe de protection consiste à conserver après le passage de contrôle à la fonction l'adresse de retour dans une « pile fantôme » distincte et à extraire cette adresse avant la sortie de la fonction.
    • Pour la plateforme ARM64, la prise en charge des instructions ARMv8.5-BTI (Branch Target Indicator) a été ajoutée pour protéger l'exécution des ensembles d'instructions sur lesquels aucune transition ne devrait se produire lors du bifurcation. Le blocage des transitions vers des sections arbitraires de code a été mis en œuvre pour contrer la création de gadgets dans les exploits utilisant des techniques de programmation orientée retour (ROP - Return-Oriented Programming, où l'attaquant ne tente pas de placer son propre code en mémoire, mais opère à partir de morceaux existants d'instructions machine, se terminant par une instruction de retour de contrôle, à partir desquels une chaîne d'appels est construite pour obtenir la fonctionnalité souhaitée).
    • La prise en charge de l'équipement pour le chiffrement inline des dispositifs de blocs a été ajoutée (Inline Encryption). Les dispositifs de chiffrement inline sont généralement intégrés au stockage, mais sont logiquement placés entre la mémoire système et le disque, assurant un chiffrement et un déchiffrement transparents des entrées/sorties basés sur les clés et algorithmes de chiffrement définis par le noyau.
    • Un paramètre de ligne de commande du noyau « initrdmem » a été ajouté, permettant de spécifier l'adresse physique de placement de initrd en mémoire lors du placement de l'image de démarrage initiale dans la RAM.
    • De nouvelles capacités ont été ajoutées : CAP_PERFMON pour accéder au sous-système de performance et effectuer un suivi des performances. CAP_BPF, permettant l'exécution de certaines opérations avec BPF (par exemple, le chargement de programmes BPF), qui nécessitaient auparavant des droits CAP_SYS_ADMIN (les droits CAP_SYS_ADMIN sont maintenant divisés en une combinaison de CAP_BPF, CAP_PERFMON et CAP_NET_ADMIN).
    • Ajouté un nouvel appareil virtio-mem, permettant la connexion et la déconnexion à chaud de la mémoire aux systèmes invités.
    • La révocation des opérations de mappage dans /dev/mem a été mise en œuvre si le pilote de l'appareil utilise des zones mémoire superposées.
    • Ajout de la protection contre la vulnérabilité CROSSTalk/SRBDS, permettant de restaurer les résultats de l'exécution de certaines instructions exécutées sur un autre cœur CPU.
  • Mémoire et services système
    • Dans le document définissant les règles de formatage du code, ont été adoptées des recommandations concernant l'utilisation d'une terminologie inclusive. Il est déconseillé aux développeurs d'utiliser les expressions 'maître/esclave' et 'liste noire/liste blanche', ainsi que le mot 'esclave' à part entière. Ces recommandations ne s'appliquent qu'à l'utilisation nouvelle de ces termes. Les occurrences déjà présentes dans le noyau resteront intactes. Dans le nouveau code, l'utilisation des termes marqués est autorisée si cela est nécessaire pour maintenir l'API et l'ABI exposées à l'espace utilisateur, ainsi que lors de la mise à jour du code pour prendre en charge le matériel ou les protocoles existants, dont les spécifications imposent l'utilisation de termes spécifiques.
    • Un outil de débogage a été inclus KCSAN (Kernel Concurrency Sanitizer), conçu pour détecter dynamiquement des conditions de concurrence à l'intérieur du noyau. L'utilisation de KCSAN est prise en charge lors de la compilation avec GCC et Clang, et nécessite l'ajout de modifications spéciales lors de la compilation pour suivre l'accès mémoire (des points d'arrêt sont appliqués lors de la lecture ou de la modification de la mémoire). Un accent particulier a été mis sur la prévention des faux positifs, l'évolutivité et la simplicité d'utilisation lors du développement de KCSAN.
    • Ajouté un mécanisme universel la livraison des notifications du noyau vers l'espace utilisateur. Le mécanisme est basé sur le pilote pipe standard et permet de distribuer efficacement les notifications du noyau sur les canaux ouverts dans l'espace utilisateur. Les points de réception des notifications sont des pipes ouverts en mode spécial, permettant d'accumuler dans un tampon circulaire les messages provenant du noyau. La lecture est effectuée par la fonction read() classique. Le propriétaire du canal détermine quelles sources dans le noyau doivent être surveillées et peut définir un filtre pour ignorer les messages et événements de certains types. Pour l'instant, seuls les événements liés aux clés sont pris en charge, tels que l'ajout/suppression de clés et la modification de leurs attributs. Les événements spécifiés sont prévus pour être utilisés dans GNOME.
    • Le développement de la fonctionnalité 'pidfd' a été poursuivi, aidant à gérer les situations de réutilisation du PID (pidfd est lié à un processus spécifique et ne change pas, tandis que le PID peut être associé à un autre processus après la fin du processus actuel lié à ce PID). Dans cette nouvelle version, la prise en charge de l'utilisation de pidfd pour attacher un processus aux namespaces a été ajoutée (il est possible de spécifier pidfd lors de l'appel système setns). L'utilisation de pidfd permet de gérer par un seul appel l'attachement d'un processus à plusieurs types de namespaces, réduisant ainsi le nombre d'appels système nécessaires et réalisant l'attachement en mode atomique (si l'attachement à l'un des namespaces échoue, les autres ne seront pas connectés non plus).
    • Un nouvel appel système faccessat2() a été ajouté, différent de
      faccessat() par un argument supplémentaire avec des drapeaux correspondant aux recommandations POSIX (auparavant, ces drapeaux étaient simulés dans la bibliothèque C, tandis que le nouveau faccessat2 permet de les réaliser dans le noyau).
    • Dans Cgroup ajouté la configuration memory.swap.high, qui peut être utilisée pour ralentir les tâches qui prennent trop de place dans la partition d'échange.
    • Dans l'interface d'entrée/sortie asynchrone io_uring la prise en charge de l'appel système tee() a été ajoutée.
    • Un mécanisme "l'itérateur BPF, destiné à afficher dans l'espace utilisateur le contenu des structures du noyau.
    • Fournie la possibilité d'utiliser un tampon circulaire pour l'échange de données entre les programmes BPF.
    • Dans le mécanisme padata, destiné à organiser l'exécution parallèle des tâches dans le noyau, le support des tâches multithread avec équilibrage de charge a été ajouté.
    • Dans le mécanisme pstore, qui permet de conserver des informations de débogage sur la cause du crash dans la mémoire, non perdues entre les redémarrages, ajouté un backend pour la sauvegarde d'informations sur des dispositifs de bloc.
    • Dans la branche du noyau PREEMPT_RT a été transférée une implémentation de blocs locaux.
    • Ajouté une nouvelle API d'allocation de buffers (AF_XDP), visant à simplifier l'écriture de pilotes réseau prenant en charge XDP (eXpress Data Path).
    • Pour l'architecture RISC-V, un support pour le débogage des composants du noyau via KGDB a été implémenté.
    • Avant la sortie 4.8, les exigences de version de GCC qui peut être utilisée pour compiler le noyau ont été augmentées. Dans une des prochaines versions, il est prévu d'augmenter le seuil à GCC 4.9.
  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Dans Device Mapper ajouté un nouveau gestionnaire dm-ebs (emulate block size), qui peut être utilisé pour émuler une taille de bloc logique plus petite (par exemple, pour émuler des secteurs de 512 octets sur des disques ayant une taille de secteur de 4K).
    • Dans le système de fichiers F2FS, un support pour la compression utilisant l'algorithme LZO-RLE a été ajouté.
    • Dans dm-crypt ajouté le support de clés chiffrées.
    • Dans Btrfs, le traitement des opérations de lecture en mode d'entrée/sortie directe a été amélioré. Lors du montage accéléré vérification des sous-répertoires et des répertoires distants, restés sans parent.
    • Dans CIFS, un paramètre 'nodelete' a été ajouté, permettant des vérifications de droits sur le serveur, mais interdisant au client de supprimer des fichiers ou des répertoires.
    • Dans Ext4, le traitement des erreurs a été amélioré. ENOSPC lors de l'utilisation de la multithreading. Dans xattr, un support pour l'espace de noms gnu.*, utilisé dans GNU Hurd, a été ajouté.
    • Pour Ext4 et XFS, le support des opérations DAX (accès direct au FS en contournant le cache de pages sans utiliser le niveau des dispositifs de bloc) a été activé pour des fichiers et répertoires spécifiques.
    • Dans l'appel système statx() un drapeau a été ajouté STATX_ATTR_DAX, en spécifiant lequel les informations sont extraites à l'aide du mécanisme DAX.
    • Dans EXFAT, ajouté le support de la vérification de la zone de démarrage a été ajouté.
    • Dans FAT, améliorée le préchargement des éléments FS. Les tests sur une clé USB 2 To lente ont montré une réduction du temps de test de 383 à 51 secondes.
  • Sous-système réseau
    • Dans le code de gestion des ponts réseau ajouté le support du protocole MRP (Media Redundancy Protocol), permettant d'assurer la tolérance aux pannes en maillant plusieurs commutateurs Ethernet.
    • Dans le système de gestion du trafic (Tc) ajouté Nouvelle fonction «gate», permettant de définir des intervalles de temps pour le traitement et le rejet de certains paquets.
    • Le noyau et l'outil ethtool ont ajouté le support des fonctions de test des câbles réseau connectés et de l'auto-diagnostic des dispositifs réseau.
    • Le stack IPv6 a ajouté le support de l'algorithme MPLS (Multiprotocol Label Switching) pour le routage des paquets en utilisant la commutation multiprotocole par étiquettes (le support MPLS pour IPv4 était déjà disponible auparavant).
    • Ajout du support pour la transmission de paquets IKE (Internet Key Exchange) et IPSec sur TCP (RFC 8229) afin de contourner les éventuels blocages UDP.
    • Ajouté Dispositif de blocage réseau rnbd, permettant d'organiser l'accès distant à un dispositif de blocage à l'aide du transport RDMA (InfiniBand, RoCE, iWARP) et du protocole RTRS.
    • Dans le stack TCP, ajouté support de la compression des plages dans les réponses de confirmation sélective (selective acknowledgment, SACK).
    • Pour IPv6, réalisée support TCP-LD (RFC 6069, Long Connectivity Disruptions).
  • Matériel
    • Dans le pilote DRM i915 pour les cartes graphiques Intel, le support par défaut des puces Intel Tiger Lake (GEN12) a été activé, pour lesquelles il y a aussi réalisée la possibilité d'utiliser le système SAGV (System Agent Geyserville) pour ajuster dynamiquement la fréquence et la tension en fonction des exigences de consommation d'énergie ou de performance.
    • Dans le pilote amdgpu, le support du format pixel FP16 a été ajouté et la possibilité de travailler avec des tampons chiffrés dans la mémoire vidéo (TMZ, Trusted Memory Zone) a été implémentée.
    • Ajout du support des capteurs de consommation d'énergie pour les processeurs AMD Zen et Zen2, ainsi que des capteurs de température pour AMD Ryzen 4000 Renoir. Pour AMD Zen et Zen2, le support de l'extraction d'informations sur la consommation d'énergie via l'interface RAPL (Running Average Power Limit).
    • Dans le pilote Nouveau, le support des formats de modificateurs NVIDIA a été ajouté. Pour gv100, la possibilité d'utiliser les modes d'affichage entrelacés a été réalisée. Identification de vGPU ajoutée.
    • Dans le pilote MSM (Qualcomm), le support des GPU Adreno A405, A640 et A650 a été ajouté.
    • Ajouté cadre interne pour la gestion des ressources DRM (Direct Rendering Manager).
    • Ajout du support pour les smartphones Xiaomi Redmi Note 7 et Samsung Galaxy S2, ainsi que pour les ordinateurs portables Elm/Hana Chromebook.
    • Ajout de pilotes pour les panneaux LCD : ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Ajout du support pour les cartes ARM et les plateformes Renesas «RZ/G1H», Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.
    • Prise en charge du processeur MIPS Loongson-2K (Loongson64 abrégé). Pour le CPU Loongson 3, la prise en charge de la virtualisation utilisant l'hyperviseur KVM a été ajoutée.
    • Ajouté
      prise en charge du processeur russe Baikal-T1 et du système sur puce qui en découle BE-T1000. Le processeur Baikal-T1 comporte deux cœurs superscalaires P5600 MIPS 32 r5 fonctionnant à une fréquence de 1,2 GHz. La puce contient un cache L2 (1 Mo), un contrôleur de mémoire DDR3-1600 ECC, 1 port Ethernet 10Gb, 2 ports Ethernet 1Gb, un contrôleur PCIe Gen.3 x4, 2 ports SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Le processeur offre un support matériel pour la virtualisation, des instructions SIMD et un accélérateur matériel cryptographique intégré, prenant en charge GOST 28147-89. La puce est développée avec un cœur de processeur MIPS32 P5600 Warrior sous licence d'Imagination Technologies.

Simultanément, la Fondation latino-américaine pour le logiciel libre a formé
une variante noyau entièrement libre 5.8 — Linux-libre 5.8-gnu, débarrassé des éléments de firmwares et de pilotes contenant des composants ou du code non libres dont l'utilisation est limitée par le fabricant. Dans la nouvelle version, le chargement des blobs dans les pilotes pour Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor et I2C EEPROM Slave a été désactivé. Le code de nettoyage des blobs dans les pilotes et sous-systèmes Adreno GPU, HabanaLabs Goya, écran tactile x86, vt6656 et btbcm 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