Rapport de développement FreeBSD Q2019 XNUMX

Publié rapport sur le développement du projet FreeBSD de juillet à septembre 2019. Les modifications incluent :

  • Questions générales et système
    • L'équipe principale a généralement approuvé l'inclusion du code sous licence BSD avec un accord de brevet supplémentaire (BSD+Brevet), mais la décision d'inclure chaque composant sous cette licence dans le système doit être approuvée séparément ;
    • La première réunion du groupe de travail créé pour effectuer la migration des codes sources du système centralisé de gestion des codes sources Subversion vers le système décentralisé Git a eu lieu. La discussion sur la pertinence de la migration est toujours en cours et de nombreuses questions restent à régler (par exemple, comment gérer contrib/, s'il faut régénérer les hachages dans le référentiel git actuel et comment implémenter au mieux les tests de validation) ;
    • De NetBSD porté la boîte à outils KCSAN (Kernel Concurrency Sanitizer), qui vous permet de détecter l'apparition de conditions de concurrence entre les threads du noyau s'exécutant sur différents processeurs ;
    • Des travaux sont en cours pour utiliser l'assembleur intégré (IAS) de Clang au lieu de l'assembleur de GNU binutils ;
    • L'infrastructure d'émulation de l'environnement Linux (Linuxulator) a été adaptée pour fonctionner sur l'architecture ARM64. L'appel système "renameat2" a été implémenté. L'utilitaire strace a été amélioré pour diagnostiquer les problèmes dans les exécutables Linux qui s'exécutent dans Linuxulator. Correction d'un crash lors de la liaison d'exécutables avec une nouvelle glibc. Ports avec composants Linux pour Linuxulator mis à jour vers CentOS 7.7 ;
    • Dans le cadre du programme Google Summer of Code, les étudiants ont réalisé avec succès six projets : une implémentation d'un utilitaire de ping unifié (IPv4 / IPv6) a été préparée, des outils ont été développés pour tester les pare-feux et détecter les erreurs dans le noyau (Kernel sanitizer), un mac_ipacl un module a été proposé et du code a été écrit pour compresser la mémoire virtuelle et un travail a été fait pour séparer le processus de construction des ports de l'installation locale ;
    • Un projet pour tester fuzz le noyau FreeBSD en utilisant le système Syzkaller. Au cours de la période de référence, avec l'aide de syzkaller, plus de dix erreurs ont été identifiées et éliminées. Pour exécuter syzkaller dans des machines virtuelles basées sur bhyve, un serveur séparé est alloué et en utilisant
      syzbot vérifie divers sous-systèmes FreeBSD dans l'infrastructure de Google. Le transfert des informations sur tous les crashs vers le service backtrace.io a été organisé pour simplifier leur regroupement et leur analyse ;

    • Des travaux sont en cours pour mettre à jour l'implémentation de zlib au niveau du noyau.
      Le code lié à la compression a été déplacé de zlib 1.0.4, qui a été publié il y a plus de 20 ans, vers la base de code actuelle zlib 1.2.11. Les fonctions compress, compress2 et uncompress ont été ajoutées au noyau pour unifier l'accès à zlib. Le code qui fournit le protocole PPP du sous-système netgraph a été modifié pour utiliser l'implémentation système de zlib, au lieu de l'édition native de cette bibliothèque. Les sous-systèmes kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe mis à jour et ng_deflate ;

    • Une nouvelle interface noyau est en cours de développement infossysctl, qui permet de retrouver des éléments dans la base de paramètres sysctl, traités sous la forme d'une MIB (Management Information Base), et de transférer des informations sur les objets vers l'espace utilisateur.
  • sécurité
    • Module noyau développé mac_ipacl, basé sur le framework MAC TrustedBSD et implémentant un système de contrôle d'accès aux paramètres de pile réseau pour les environnements jail. Par exemple, à l'aide de mac_ipacl, un administrateur système hôte peut empêcher l'utilisateur root dans un environnement jail de modifier ou de définir des adresses IP ou des paramètres de sous-réseau pour certaines interfaces réseau. Système de contrôle d'accès obligatoire proposé il permet définir des listes d'adresses IP et de sous-réseaux autorisés pour Jail, interdire l'installation de certaines adresses IP et sous-réseaux dans Jail ou restreindre les modifications de paramètres uniquement pour certaines interfaces réseau ;
    • Intel a fait don d'un port de pile logicielle au projet TPM 2.0 (Trusted Platform Module) pour interagir avec la puce informatique sécurisée, qui est généralement utilisée pour le démarrage vérifié du micrologiciel et du chargeur de démarrage du système d'exploitation. Les composants de la pile sont fournis sous la forme de ports security/tpm2-tss, security/tpm2-tools et security/tpm2-abrmd. Le port tpm2-tss comprend des bibliothèques pour l'utilisation de l'API TPM2, tpm2-tools fournit des utilitaires de ligne de commande pour effectuer des opérations TPM, et tpm2-abrmd contient un processus d'arrière-plan avec la mise en œuvre des composants TPM Access Broker et Resource Manager qui multiplexent les demandes de différents utilisateurs TPM sur un seul appareil. En plus du démarrage vérifié sur FreeBSD, TPM peut être utilisé pour améliorer la sécurité Strongswan IPsec, SSH et TLS en effectuant des opérations cryptographiques sur une puce séparée ;
    • Le noyau pour l'architecture amd64 est adapté pour être chargé à l'aide de la technique de protection W^X (write XOR execute), ce qui implique que les pages mémoire ne peuvent pas être simultanément disponibles pour l'écriture et l'exécution (le noyau peut désormais être chargé à l'aide de pages mémoire exécutables pour lesquelles l'écriture est désactivée). La nouvelle méthode de protection du noyau est incluse dans la branche HEAD et fera partie des versions FreeBSD 13.0 et 12.2 ;
    • Pour les appels système mmap et mprotect mis en œuvre la macro PROT_MAX(), qui permet de déterminer le jeu d'indicateurs de restriction d'accès (PROT_READ, PROT_WRITE, PROT_EXEC) valide pour les modifications ultérieures. A l'aide de PROT_MAX(), un développeur peut interdire le transfert d'une zone mémoire vers la catégorie exécutable ou demander de la mémoire qui n'autorise pas l'exécution, mais qui pourra ensuite être transférée vers l'exécutable. Par exemple, une zone mémoire peut être ouverte en écriture uniquement pendant la durée de la liaison dynamique ou de la génération de code JIT, mais une fois l'écriture terminée, elle est limitée uniquement à la lecture et à l'exécution, et dans le futur, en cas de compromission , l'attaquant ne pourra pas autoriser l'écriture pour ce bloc mémoire. En plus de PROT_MAX(), sysctl vm.imply_prot_max est également implémenté, qui, lorsqu'il est activé, détermine l'ensemble d'indicateurs valides en fonction des paramètres initiaux du premier appel mmap ;
    • Pour renforcer la protection contre l'exploitation des vulnérabilités, en plus de la technique de randomisation de l'espace d'adressage (ASLR), un mécanisme est proposé pour randomiser les décalages de pointeurs adressant le cadre de pile initial et les structures placées sur la pile avec des informations sur l'environnement, les paramètres de lancement du programme, et des données pour les images exécutables au format ELF ;
    • Un travail a été fait pour supprimer la fonction get unsafe de la libc (à partir de la norme C11, cette fonction est exclue de la spécification) et pour corriger les ports qui utilisent encore cette fonction. Le changement est prévu pour être proposé dans FreeBSD 13.0 ;
    • Un projet pilote a été lancé pour créer des outils d'orchestration d'environnements pénitentiaires basés sur le cadre boîte pour créer et exporter des images, implémenté de manière similaire à Docker, et un pilote nomade, qui fournit une interface pour lancer dynamiquement des applications dans un environnement jail. Le modèle proposé permet de séparer les processus de création d'environnements jail et de déploiement d'applications dans ceux-ci. L'un des objectifs du projet est de fournir un moyen de manipuler les prisons comme des conteneurs de style Docker ;
  • Systèmes de stockage et de fichiers
    • De NetBSD à l'utilitaire "makefs" reporté prise en charge du système de fichiers FAT (msdosfs). Les modifications préparées vous permettent de créer des images FS avec FAT sans utiliser le pilote md et sans privilèges root ;
    • Le pilote du sous-système FUSE (système de fichiers dans l'espace USErspace) a été retravaillé, ce qui permet de créer des implémentations de systèmes de fichiers dans l'espace utilisateur. Le pilote initialement livré contenait de nombreux bogues et était basé sur FUSE 7.8 sorti il ​​y a 11 ans. Dans le cadre du projet de modernisation du pilote, la prise en charge du protocole FUSE 7.23 a été implémentée, du code a été ajouté pour vérifier les autorisations côté noyau ("-o default_permissions"), les appels VOP_MKNOD, VOP_BMAP et VOP_ADVLOCK ont été ajoutés, la possibilité d'interrompre les opérations FUSE a été ajouté, la prise en charge des canaux sans nom et des sockets unix a été ajoutée dans fusefs, il est devenu possible d'utiliser kqueue pour /dev/fuse, la mise à jour des paramètres de montage via "mount -u" a été autorisée, la prise en charge de l'exportation de fusefs via NFS a été ajoutée, la comptabilité RLIMIT_FSIZE a été mis en œuvre, les drapeaux FOPEN_KEEP_CACHE et FUSE_ASYNC_READ ont été ajoutés, des optimisations de performances significatives ont été apportées et l'organisation de la mise en cache a été améliorée. Le nouveau pilote est inclus dans les branches head et stable/12 (inclus avec FreeBSD 12.1) ;
    • L'implémentation de NFSv4.2 (RFC-7862) pour FreeBSD est presque terminée. Au cours de la période de référence, l'accent a été mis sur les tests. Les tests de compatibilité avec l'implémentation Linux sont terminés, mais les tests du serveur pNFS avec NFSv4.2 sont toujours en cours. En général, le code est déjà considéré comme prêt à être intégré dans les branches head/current de FreeBSD. La nouvelle version de NFS ajoute le support des fonctions posix_fadvise, posix_fallocate, les modes SEEKHOLE/SEEKDATA dans lseek, la copie locale des parties du fichier sur le serveur (sans transfert vers le client) ;
  • Assistance matérielle
    • Lancement d'un projet pour améliorer FreeBSD sur les ordinateurs portables. Le premier appareil à être audité pour le support matériel dans FreeBSD était l'ordinateur portable Lenovo X1 Carbon de septième génération ;
    • CheriBSD , un fork de FreeBSD pour l'architecture de processeur de recherche CHERI (Capability Hardware Enhanced RISC Instructions), mis à jour pour prendre en charge le prochain processeur ARM Morello, qui prendra en charge le système de contrôle d'accès à la mémoire de CHERI basé sur le modèle de sécurité Capsicum. Chip Morello planifient sortie en 2021. Les développeurs de CheriBSD continuent également de suivre le développement du prototype de référence CHERI basé sur l'architecture MIPS ;
    • Prise en charge étendue des puces RockChip RK3399 utilisées dans les cartes RockPro64 et NanoPC-T4. L'amélioration la plus significative a été la prise en charge eMMC et le développement d'un nouveau pilote pour le contrôleur eMMC utilisé dans la carte ;
    • Les travaux se sont poursuivis sur la mise en œuvre de la prise en charge du SoC ARM64 Broadcom BCM5871X avec les processeurs ARMv8 Cortex-A57 destinés à être utilisés dans les routeurs, les passerelles et les NAS. Au cours de la période de déclaration
      prise en charge étendue d'iProc PCIe et ajout de la possibilité d'utiliser des opérations cryptographiques matérielles pour accélérer IPsec.
      L'intégration du code dans la branche HEAD est attendue au quatrième trimestre ;

    • Des progrès significatifs ont été réalisés dans le développement du port FreeBSD pour la plate-forme powerpc64. L'accent est mis sur la fourniture de performances de qualité sur les systèmes équipés de processeurs IBM POWER8 et POWER9, mais est éventuellement pris en charge sur les anciens Apple Power Mac, x500 et Amiga A1222. La branche powerpc*/12 continue d'être livrée avec gcc 4.2.1, et la branche powerpc*/13 sera bientôt migrée vers llvm90. Sur 33306 ports, 30514 sont assemblés avec succès ;
    • Le portage de FreeBSD sur un SoC NXP LS64A 1046 bits basé sur un processeur ARMv8 Cortex-A72 avec moteur d'accélération de traitement de paquets réseau intégré, Ethernet 10 Go, PCIe 3.0, SATA 3.0 et USB 3.0 s'est poursuivi. Au cours de la période de référence, la prise en charge de l'interface réseau USB 3.0, SD / MMC, I2C, DPAA et GPIO a été mise en œuvre. Nous prévoyons de prendre en charge QSPI et d'optimiser les performances de l'interface réseau. L'achèvement et l'intégration dans la branche HEAD sont attendus au quatrième trimestre 4 ;
    • Le pilote ena a été mis à jour pour prendre en charge la deuxième génération d'adaptateurs réseau ENAv2 (Elastic Network Adapter) utilisés dans l'infrastructure Elastic Compute Cloud (EC2) pour organiser la communication entre les nœuds EC2 à des vitesses allant jusqu'à 25 Gb/s. Ajout et test de la prise en charge de NETMAP au pilote ena et ajustement de la disposition de la mémoire pour activer le mode LLQ dans les environnements Amazon EC2 A1 ;
  • Système d'applications et de ports
    • Mise à jour des composants de la pile graphique et des ports liés à xorg. Les ports utilisant USE_XORG et XORG_CAT ont été migrés vers le framework USES au lieu d'appeler bsd.xorg.mk via bsd.port.mk. Ces ports incluent désormais le drapeau "USES=xorg" dans leurs makefiles. La fonctionnalité XORG_CAT a été extraite de bsd.xorg.mk et est maintenant activée avec le drapeau "USES=xorg-cat". Ajout d'outils pour générer directement des ports xorg à partir d'un référentiel git
      freedesktop.org, qui permet par exemple de générer des ports pour des versions qui ne sont pas encore sorties. À l'avenir, il est prévu de préparer une boîte à outils pour utiliser le système de construction meson au lieu d'autotools pour construire des ports xorg.

      Des travaux ont été effectués pour nettoyer les anciens ports xorg liés aux composants qui ne sont plus pris en charge, comme la suppression du port x11/libXp et la dépréciation des ports x11/Xxf86misc, x11-fonts/libXfontcache et graphics/libGLw ;

    • Des travaux ont été effectués pour améliorer la prise en charge de Java 11 et des versions plus récentes dans FreeBSD, et pour porter certaines modifications sur la branche Java 8. Depuis que FreeBSD a implémenté la prise en charge des nouvelles fonctionnalités de Java 11 telles que Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound et SCTP, le travail s'est déplacé pour s'assurer que tous les tests de compatibilité réussissent. Le nombre d'échecs lors de la réussite des tests a été réduit de 50 à 2 ;
    • Le bureau KDE Plasma, les frameworks KDE, les applications KDE et Qt sont tenus à jour et mis à jour avec les dernières versions ;
    • Ports avec le bureau Xfce mis à jour pour la version 4.14;
    • L'arborescence des ports FreeBSD a passé le cap des 38000 2000 ports, le nombre de PR ouverts est légèrement supérieur à 400, dont 7340 PR sont toujours en attente. Au cours de la période de référence, 169 1.12 modifications ont été apportées par 2.0.4 développeurs. Deux nouveaux contributeurs (Santhosh Raju et Dmitri Goutnik) ont obtenu les droits de committer. Une nouvelle version du gestionnaire de packages pkg 9.0 a été publiée avec la prise en charge des superpositions dans l'arborescence des ports et le nettoyage de bsd.sites.mk. Les mises à jour de version importantes dans les ports incluent : Lazarus 5.30, LLVM 11, Perl2.6, PostgreSQL 69.0.1, Ruby 68.1.0, Firefox 76.0, Firefox-esr XNUMX, Chromium XNUMX ;
    • Le développement du projet se poursuit ClonOS, développement un kit de distribution spécialisé pour déployer une infrastructure de serveur virtuel. En termes de tâches à résoudre, ClonOS ressemble à des systèmes tels que Proxmox, Triton (Joyent), OpenStack, OpenNebula et Amazon AWS, dont la principale différence est l'utilisation de FreeBSD et la capacité de gérer, déployer et gérer les conteneurs FreeBSD Jail et environnements virtuels basés sur les hyperviseurs Bhyve et Xen . Parmi les changements récents, il y a le soutien
      cloud-init pour Linux/BSD VM et cloudbase-init pour Windows VM, début de la transition vers des images natives, utilisation de Jenkins CI pour les tests de build et nouveau référentiel pkg pour l'installation
      ClonOS à partir de packages.

Source: opennet.ru

Ajouter un commentaire