Version du noyau Linux 5.8

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.8. Parmi les changements les plus notables : un détecteur de condition de concurrence KCSAN, un mécanisme universel pour envoyer des notifications à l'espace utilisateur, la prise en charge matérielle du cryptage en ligne, des mécanismes de sécurité améliorés pour ARM64, la prise en charge du processeur russe Baikal-T1, la possibilité de monter séparément des instances procfs. , implémentation des mécanismes de sécurité Shadow pour ARM64 Call Stack et BTI.

Le noyau 5.8 est devenu le plus important en termes de nombre de modifications de tous les noyaux pendant toute l'existence du projet. De plus, les changements ne sont liés à aucun sous-système en particulier, mais couvrent différentes parties du noyau et sont principalement associés au remaniement et au nettoyage internes. Les changements les plus importants sont observés chez les conducteurs. La nouvelle version comprenait 17606 2081 correctifs provenant de 20 65 développeurs, qui affectaient environ 16180 % de tous les fichiers du référentiel de code du noyau. La taille du correctif est de 1043240 Mo (les modifications ont affecté 489854 5.7 fichiers, 15033 39 37 lignes de code ont été ajoutées, 5.8 16 lignes ont été supprimées). À titre de comparaison, la branche 11 comportait 3 4 correctifs et une taille de correctif de XNUMX Mo. 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 % sont liées aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

principal les innovations:

  • Virtualisation et sécurité
    • Le chargement des modules du noyau comportant des sections de code dans lesquelles les bits permettant l'exécution et l'écriture sont définis simultanément est prévu. Le changement a été implémenté dans le cadre d'un projet plus vaste visant à débarrasser le noyau de l'utilisation de pages mémoire permettant l'exécution et l'écriture simultanées.
    • Il est désormais possible de créer des instances procfs distinctes, permettant l'utilisation de plusieurs points de montage procfs, montés avec différentes options, mais reflétant le même espace de noms d'identifiant de processus (espace de noms pid). Auparavant, tous les points de montage procfs ne reflétaient qu'une seule représentation interne, et toute modification des paramètres de montage affectait tous les autres points de montage associés au même espace de noms d'ID de processus. Parmi les domaines dans lesquels le montage avec différentes options peut être demandé, citons la mise en œuvre d'une isolation légère pour les systèmes embarqués avec la possibilité de masquer certains types de processus et de nœuds d'informations dans les procfs.
    • La prise en charge du mécanisme a été implémentée pour la plateforme ARM64
      Pile d'appels de l'ombre, fourni par le compilateur Clang pour protéger contre l'écrasement de l'adresse de retour d'une fonction en cas de débordement de tampon de 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.

    • La prise en charge des instructions a été ajoutée pour la plate-forme ARM64 ARMv8.5-BTI (Branch Target Indicator) pour protéger l’exécution d’ensembles d’instructions vers lesquels il ne faut pas créer de branchement. Le blocage des transitions vers des sections arbitraires de code est mis en œuvre pour empêcher la création de gadgets dans des exploits utilisant des techniques de programmation orientée retour (ROP - Return-Oriented Programming ; l'attaquant ne cherche pas à placer son code en mémoire, mais opère sur des morceaux déjà existants. d'instructions machine qui se terminent par une instruction de contrôle de retour, à partir de laquelle une chaîne d'appels est construite pour obtenir la fonctionnalité souhaitée).
    • Ajout de la prise en charge matérielle pour le chiffrement en ligne des périphériques de bloc (Chiffrement en ligne). Les dispositifs de chiffrement Inlinep sont généralement intégrés au lecteur, mais sont logiquement situés entre la mémoire système et le disque, chiffrant et déchiffrant les E/S de manière transparente en fonction des clés spécifiées par le noyau et d'un algorithme de chiffrement.
    • Ajout de l'option de ligne de commande du noyau "initrdmem" pour vous permettre de spécifier l'adresse mémoire physique de l'initrd lors du placement de l'image de démarrage initiale dans la RAM.
    • Nouvelle fonctionnalité ajoutée : CAP_PERFMON pour accéder au sous-système de performances et effectuer une surveillance des performances. CAP_BPF, qui autorise certaines opérations BPF (telles que le chargement de programmes BPF) qui nécessitaient auparavant des droits CAP_SYS_ADMIN (les droits CAP_SYS_ADMIN sont désormais divisés en une combinaison de CAP_BPF, CAP_PERFMON et CAP_NET_ADMIN).
    • Ajouté un nouveau périphérique virtio-mem qui vous permet de brancher et de brancher à chaud de la mémoire sur des systèmes invités.
    • Implémentation du rappel des opérations de mappage dans /dev/mem si le pilote de périphérique utilise des zones de mémoire qui se chevauchent.
    • Protection contre les vulnérabilités ajoutée Discussion croisée/SRBDS, qui permet de restaurer les résultats de certaines instructions exécutées sur un autre cœur de CPU.
  • Services mémoire et système
    • Dans le document définissant les règles de formatage du code, accepté recommandations pour l’utilisation d’une terminologie inclusive. Il n'est pas recommandé aux développeurs d'utiliser les combinaisons « maître/esclave » et « liste noire / liste blanche », ainsi que le mot « esclave » séparément. Les recommandations concernent uniquement les nouveaux usages de ces termes. Les mentions des mots spécifiés déjà existants dans le noyau resteront intactes. Dans le nouveau code, l'utilisation des termes marqués est autorisée si nécessaire pour prendre en charge l'API et l'ABI exposées dans 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 nécessitent l'utilisation de certains termes.
    • Outil de débogage inclus KCSAN (Kernel Concurrency Sanitizer), conçu pour la détection dynamique conditions de course à l'intérieur du noyau. L'utilisation de KCSAN est prise en charge lors de la construction dans GCC et Clang et nécessite des modifications spéciales au moment de la compilation pour suivre l'accès à la mémoire (des points d'arrêt sont utilisés et déclenchés lorsque la mémoire est lue ou modifiée). Le développement de KCSAN s'est concentré sur la prévention des faux positifs, l'évolutivité et la facilité d'utilisation.
    • Добавлен mécanisme universel envoyer des notifications du noyau à l'espace utilisateur. Le mécanisme est basé sur le pilote de canal standard et vous permet de distribuer efficacement les notifications du noyau sur les canaux ouverts dans l'espace utilisateur. Les points de réception de notifications sont des canaux ouverts dans un mode spécial et permettant aux messages reçus du noyau d'être accumulés dans un tampon en anneau. La lecture est effectuée par la fonction habituelle read(). Le propriétaire du canal détermine quelles sources du noyau doivent être surveillées et peut définir un filtre pour ignorer certains types de messages et d'événements. Parmi les événements, seules les opérations avec des clés sont actuellement prises en charge, telles que l'ajout/suppression de clés et la modification de leurs attributs. Ces événements devraient être utilisés dans GNOME.
    • Développement continu de la fonctionnalité « pidfd » pour aider à gérer les situations de réutilisation de PID (pidfd est associé à un processus spécifique et ne change pas, tandis qu'un PID peut être associé à un autre processus après la fin du processus actuel associé à ce PID). La nouvelle version ajoute la prise en charge de l'utilisation de pidfd pour attacher un processus aux espaces de noms (permettant de spécifier pidfd lors de l'exécution de l'appel système setns). L'utilisation de pidfd vous permet de contrôler l'attachement d'un processus à plusieurs types d'espaces de noms avec un seul appel, réduisant considérablement le nombre d'appels système nécessaires et implémentant l'attachement en mode atomique (si l'attachement à l'un des espaces de noms échoue, les autres ne se connecteront pas) .
    • Ajout d'un nouvel appel système faccessat2(), différent de
      faccessat() un argument supplémentaire avec des drapeaux conformes aux recommandations POSIX (auparavant, ces drapeaux étaient émulés dans la bibliothèque C, et le nouveau faccessat2 permet de les implémenter dans le noyau).

    • Dans le groupe C ajoutée un paramètre memory.swap.high qui peut être utilisé pour ralentir les tâches qui occupent trop d'espace de swap.
    • Vers l'interface d'E/S asynchrone io_urant ajout de la prise en charge de l'appel système tee().
    • Mécanisme ajouté "Itérateur BPF, conçu pour afficher le contenu des structures du noyau dans l'espace utilisateur.
    • Fourni par la possibilité d'utiliser un tampon en anneau pour l'échange de données entre les programmes BPF.
    • Dans le mécanisme padata, conçu pour organiser l'exécution parallèle de tâches dans le noyau, a ajouté la prise en charge des tâches multithread avec équilibrage de charge.
    • Dans le mécanisme pstore, qui permet d'enregistrer les informations de débogage sur la cause du crash dans des zones mémoire qui ne sont pas perdues entre les redémarrages, ajoutée backend pour enregistrer les informations afin de bloquer les appareils.
    • Depuis la branche du noyau PREEMPT_RT reporté mise en place de verrous locaux.
    • Добавлен nouvelle API d'allocation de tampon (AF_XDP), visant à simplifier l'écriture de pilotes réseau avec le support XDP (eXpress Data Path).
    • Pour l'architecture RISC-V, la prise en charge du débogage des composants du noyau à l'aide de KGDB a été implémentée.
    • Avant la version 4.8, les exigences relatives à la version de GCC pouvant être utilisée pour construire le noyau ont été augmentées. Dans l'une des prochaines versions, il est prévu de relever la barre jusqu'à GCC 4.9.
  • Sous-système de disque, E/S et systèmes de fichiers
    • Dans le mappeur de périphériques ajoutée nouveau gestionnaire dm-ebs (émulation de la taille de bloc), 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 de taille de secteur 4K).
    • Le système de fichiers F2FS prend désormais en charge la compression à l'aide de l'algorithme LZO-RLE.
    • Dans dm-crypt ajoutée prise en charge des clés cryptées.
    • Btrfs a amélioré la gestion des opérations de lecture en mode E/S directe. Lors du montage accéléré vérification des sous-sections supprimées et des répertoires laissés sans parent.
    • Un paramètre « nodelete » a été ajouté à CIFS, permettant des contrôles normaux d'autorisations sur le serveur, mais interdisant au client de supprimer des fichiers ou des répertoires.
    • Ext4 a amélioré la gestion des erreurs ENOSPC lors de l'utilisation du multithreading. xattr a ajouté la prise en charge de l'espace de noms gnu.* utilisé dans GNU Hurd.
    • Pour Ext4 et XFS, la prise en charge des opérations DAX est activée (accès direct au système de fichiers, contournement du cache de pages sans utiliser le niveau de périphérique bloc) par rapport aux fichiers et répertoires individuels.
    • En appel système statx() drapeau ajouté STATX_ATTR_DAX, qui, lorsqu'il est spécifié, récupère les informations à l'aide du moteur DAX.
    • EXFAT ajoutée prise en charge de la vérification de la zone de démarrage.
    • En matières grasses amélioré chargement proactif des éléments FS. Le test d'une clé USB lente de 2 To a montré une réduction du temps de réalisation du test de 383 à 51 secondes.
  • Sous-système réseau
    • Dans le code de contrôle du fonctionnement des ponts réseau ajoutée prise en charge du protocole MRP (Media Redundancy Protocol), qui permet une tolérance aux pannes en bouclant plusieurs commutateurs Ethernet.
    • Vers le système de contrôle de la circulation (Tc) ajoutée nouvelle action « gate », qui permet de définir des intervalles de temps de traitement et d'élimination de certains paquets.
    • La prise en charge du test du câble réseau connecté et de l'autodiagnostic des périphériques réseau a été ajoutée au noyau et à l'utilitaire ethtool.
    • La prise en charge de l'algorithme MPLS (Multiprotocol Label Switching) a été ajoutée à la pile IPv6 pour le routage des paquets à l'aide de la commutation d'étiquettes multiprotocoles (MPLS était auparavant pris en charge pour IPv4).
    • Ajout de la prise en charge de la transmission de paquets IKE (Internet Key Exchange) et IPSec via TCP (RFC 8229) pour contourner un éventuel blocage UDP.
    • Ajouté périphérique de bloc réseau rnbd, qui permet d'organiser l'accès à distance à un périphérique de bloc en utilisant le transport RDMA (InfiniBand, RoCE, iWARP) et le protocole RTRS.
    • Dans la pile TCP ajoutée prise en charge de la compression de plage dans les réponses d'accusé de réception sélectif (SACK).
    • Pour IPv6 mis en œuvre Prise en charge TCP-LD (RFC 6069, longues interruptions de connectivité).
  • équipement
    • Le pilote DRM i915 pour les cartes vidéo Intel inclut par défaut la prise en charge des puces Intel Tiger Lake (GEN12), pour lesquelles mis en œuvre la possibilité d'utiliser le système SAGV (System Agent Geyserville) pour ajuster dynamiquement la fréquence et la tension en fonction de la consommation électrique ou des exigences de performances.
    • Le pilote amdgpu a ajouté la prise en charge du format de pixel FP16 et la possibilité de travailler avec des tampons cryptés dans la mémoire vidéo (TMZ, Trusted Memory Zone).
    • Ajout de la prise en charge des capteurs de puissance pour les processeurs AMD Zen et Zen2, ainsi que des capteurs de température pour AMD Ryzen 4000 Renoir. La prise en charge de la récupération des informations sur la consommation d'énergie via l'interface est fournie pour AMD Zen et Zen2 RAPI (Limite de puissance moyenne courante).
    • Ajout de la prise en charge du format de modificateur NVIDIA au pilote Nouveau. Pour le gv100, la possibilité d'utiliser les modes de numérisation entrelacée a été implémentée. Ajout de la détection vGPU.
    • Ajout de la prise en charge des GPU Adreno A405, A640 et A650 au pilote MSM (Qualcomm).
    • Добавлен cadre interne de gestion des ressources DRM (Direct Rendering Manager).
    • Ajout de la prise en charge des smartphones Xiaomi Redmi Note 7 et Samsung Galaxy S2, ainsi que des ordinateurs portables Elm/Hana Chromebook.
    • Pilotes ajoutés pour les panneaux LCD : ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Ajout de la prise en charge des cartes et plates-formes ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Balise i.MX8m-Mini, Qualcomm SDM660/SDM630, boîtier TV Xnano X5, Stinger96, Beaglebone-AI.

    • Ajout de la prise en charge du processeur MIPS Loongson-2K (en abrégé Loongson64). Pour le CPU Loongson 3, la prise en charge de la virtualisation utilisant l'hyperviseur KVM a été ajoutée.
    • Ajouté par
      prise en charge du processeur russe Baikal-T1 et du système sur puce basé sur celui-ci BE-T1000. Le processeur Baikal-T1 contient deux cœurs superscalaires P5600 MIPS 32 r5 fonctionnant à 1.2 GHz. La puce contient un cache L2 (1 Mo), un contrôleur mémoire DDR3-1600 ECC, 1 port Ethernet 10 Go, 2 ports Ethernet 1 Go, un contrôleur PCIe Gen.3 x4, 2 ports SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Le processeur fournit une prise en charge matérielle pour la virtualisation, des instructions SIMD et un accélérateur cryptographique matériel intégré prenant en charge GOST 28147-89. La puce est développée à l'aide d'une unité centrale de processeur MIPS32 P5600 Warrior sous licence d'Imagination Technologies.

Parallèlement, la Fondation latino-américaine du logiciel libre formé
вариант noyau entièrement gratuit 5.8 - Linux libre 5.8-gnu, débarrassé des éléments du firmware et du pilote contenant des composants non libres ou des sections de code, dont la portée est limitée par le fabricant. La nouvelle version désactive le chargement de blob 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 esclave EEPROM I2C. Code de nettoyage de blob mis à jour dans Adreno GPU, HabanaLabs Goya, écran tactile x86, pilotes et sous-systèmes vt6656 et btbcm.

Source: opennet.ru

Ajouter un commentaire