Framework pour écrire des pilotes sécurisés pour le noyau Linux dans Rust

Josh Triplett, qui travaille chez Intel et fait partie du comité supervisant le développement de Crates.io, s'exprimant lors de l'Open Source Technology Summit представил un groupe de travail visant à amener le langage Rust à parité avec le langage C dans le domaine de la programmation système.

Dans un groupe de travail en cours de création, les développeurs de Rust, en collaboration avec les ingénieurs d'Intel, prépareront des spécifications définissant les fonctionnalités à implémenter dans Rust pour la programmation système. La programmation système nécessite souvent des manipulations de bas niveau, telles que l'exécution d'instructions privilégiées du processeur et l'obtention d'informations détaillées sur l'état du processeur. Parmi les fonctionnalités similaires déjà développées pour Rust, on note la prise en charge des structures sans nom, des unions, des insertions en langage assembleur (la macro « asm ! ») et du format de nombres à virgule flottante BFLOAT16.

Josh estime que l'avenir de la programmation système appartient à Rust et que le langage C dans les réalités modernes revendique la place qu'occupait Assembly au cours des années passées. Rouiller
non seulement soulage les développeurs des problèmes inhérents au langage C qui surviennent en raison du travail de bas niveau avec la mémoire, mais offre également la possibilité de l'utiliser dans le développement de paradigmes de programmation modernes.

En cours discussions des performances
Josh a eu l'idée d'ajouter la possibilité de développer des pilotes dans le noyau Linux dans le langage Rust, ce qui permettrait de créer des pilotes plus sûrs et de meilleure qualité avec un minimum d'effort, sans problèmes tels que l'accès à la mémoire après la libération, null déréférencements de pointeurs et dépassements de tampon.

Greg Kroah-Hartman, responsable de la maintenance de la branche stable du noyau Linux, s'est dit prêt à ajouter au noyau un cadre de développement de pilotes en langage Rust s'il présente de réels avantages par rapport au C, par exemple, il fournira une sécurité liaisons sur l'API du noyau. De plus, Greg considère ce framework uniquement comme une option, non active par défaut, afin de ne pas inclure Rust comme dépendance de build sur le noyau.

Il s’est avéré que plusieurs équipes travaillent déjà dans ce sens. Par exemple, les développeurs de la société « Fish in a Barrel » подготовили une boîte à outils pour écrire des modules chargeables pour le noyau Linux dans le langage Rust, en utilisant un ensemble de couches abstraites sur les interfaces et les structures du noyau pour augmenter la sécurité. Les couches sont automatiquement générées en fonction des fichiers d'en-tête du noyau existants à l'aide de l'utilitaire liaison. Clang est utilisé pour créer des couches. En plus des intercalaires, les modules assemblés utilisent le package staticlib.

Parallèle développe Un autre projet s'est concentré sur le développement de pilotes pour les systèmes embarqués et les appareils IoT, qui utilisent également bindgen pour générer des couches basées sur les fichiers d'en-tête du noyau. Le framework vous permet d'améliorer la sécurité des pilotes sans apporter de modifications au noyau - au lieu de créer des niveaux d'isolement supplémentaires pour les pilotes dans le noyau, il est proposé de bloquer les problèmes au stade de la compilation, en utilisant le langage Rust plus sécurisé. On suppose qu'une telle approche pourrait être demandée par les fabricants d'équipements développant des pilotes propriétaires à la hâte sans procéder à un audit approprié.

Toutes les fonctionnalités prévues n'ont pas encore été implémentées, mais le framework est déjà tout à fait adapté au travail et a été utilisé pour écrire un pilote fonctionnel pour le contrôleur Ethernet USB LAN9512 fourni dans la carte Raspberry Pi 3. Le pilote smsc95xx existant, écrit par Langage C. Il est à noter que la taille du module et la surcharge des composants d'exécution lors du développement d'un pilote dans Rust sont insignifiantes, ce qui permet d'utiliser le framework pour des appareils aux ressources limitées.

Source: opennet.ru

Ajouter un commentaire