Framework zum Schreiben sicherer Treiber für den Linux-Kernel in Rust

Josh Triplett, der bei Intel arbeitet und Mitglied des Ausschusses ist, der die Entwicklung von Crates.io überwacht, spricht auf dem Open Source Technology Summit eingeführt eine Arbeitsgruppe mit dem Ziel, die Rust-Sprache im Bereich der Systemprogrammierung mit der C-Sprache gleichzusetzen.

In einer im Aufbau befindlichen Arbeitsgruppe werden Rust-Entwickler gemeinsam mit Ingenieuren von Intel Spezifikationen erarbeiten, die die Funktionalität definieren, die in Rust für die Systemprogrammierung implementiert werden muss. Die Systemprogrammierung erfordert häufig Manipulationen auf niedriger Ebene, z. B. das Ausführen privilegierter Prozessoranweisungen und das Erhalten detaillierter Informationen über den Zustand des Prozessors. Zu den ähnlichen Funktionen, die bereits für Rust entwickelt werden, gehört die Unterstützung unbenannter Strukturen, Unions, Assembler-Einfügungen (das „asm!“-Makro) und das Gleitkommazahlenformat BFLOAT16.

Josh glaubt, dass die Zukunft der Systemprogrammierung Rust gehört und dass die Sprache C in der modernen Realität den Platz einnimmt, den in den vergangenen Jahren Assembly einnahm. Rost
Entlastet Entwickler nicht nur von den Problemen, die der C-Sprache innewohnen und durch die Arbeit mit dem Speicher auf niedriger Ebene entstehen, sondern bietet auch die Möglichkeit, sie bei der Entwicklung moderner Programmierparadigmen zu verwenden.

Während der Diskussionen Aufführungen
Josh hatte die Idee, dem Linux-Kernel die Möglichkeit hinzuzufügen, Treiber in der Rust-Sprache zu entwickeln, was es ermöglichen würde, mit minimalem Aufwand sicherere und bessere Treiber zu erstellen, ohne Probleme wie Speicherzugriff nach dem Freigeben, null Zeigerdereferenzierungen und Pufferüberläufe.

Greg Kroah-Hartman, der für die Pflege des stabilen Zweigs des Linux-Kernels verantwortlich ist, äußerte seine Bereitschaft, dem Kernel ein Framework für die Entwicklung von Treibern in der Rust-Sprache hinzuzufügen, wenn es echte Vorteile gegenüber C bietet und beispielsweise Sicherheit bietet Bindungen über die Kernel-API. Darüber hinaus betrachtet Greg dieses Framework nur als Option und nicht standardmäßig als aktiv, um Rust nicht als Build-Abhängigkeit im Kernel einzubeziehen.

Es stellte sich heraus, dass mehrere Teams bereits in diese Richtung arbeiten. Zum Beispiel Entwickler der Firma „Fish in a Barrel“ подготовили ein Toolkit zum Schreiben ladbarer Module für den Linux-Kernel in der Rust-Sprache, das eine Reihe abstrakter Schichten über den Schnittstellen und Kernelstrukturen verwendet, um die Sicherheit zu erhöhen. Mithilfe des Dienstprogramms werden Ebenen automatisch basierend auf den vorhandenen Kernel-Header-Dateien generiert bindgen. Clang wird zum Aufbau von Ebenen verwendet. Zusätzlich zu den Zwischenschichten verwenden die zusammengestellten Module das Paket staticlib.

Parallel entwickelt sich Ein weiteres Projekt konzentrierte sich auf die Entwicklung von Treibern für eingebettete Systeme und IoT-Geräte, das ebenfalls bindgen verwendet, um Schichten basierend auf Kernel-Header-Dateien zu generieren. Mit dem Framework können Sie die Treibersicherheit verbessern, ohne Änderungen am Kernel vorzunehmen. Anstatt zusätzliche Isolationsstufen für Treiber im Kernel zu erstellen, wird vorgeschlagen, Probleme in der Kompilierungsphase mithilfe der sichereren Rust-Sprache zu blockieren. Es wird davon ausgegangen, dass ein solcher Ansatz möglicherweise von Geräteherstellern gefordert wird, die in Eile proprietäre Treiber entwickeln, ohne eine ordnungsgemäße Prüfung durchzuführen.

Es wurden noch nicht alle vorgesehenen Funktionen implementiert, aber das Framework ist bereits recht arbeitstauglich und wurde zum Schreiben eines funktionierenden Treibers für den im Raspberry Pi 9512-Board enthaltenen USB-Ethernet-Controller LAN3 verwendet. Der vorhandene smsc95xx-Treiber, geschrieben von in C Sprache. Es wird darauf hingewiesen, dass die Modulgröße und der Overhead durch Laufzeitkomponenten bei der Entwicklung eines Treibers in Rust unbedeutend sind, was die Verwendung des Frameworks für Geräte mit begrenzten Ressourcen ermöglicht.

Source: opennet.ru

Kommentar hinzufügen