Ein Framework zur Erstellung sicherer Treiber für den Linux-Kernel in Rust

Josh Triplett, der bei Intel arbeitet und im Komitee tätig ist, das die Entwicklung von Crates.io überwacht, hielt bei der Open Source Technology Summit eine Rede. den eine Arbeitsgruppe, die darauf abzielt, die Programmiersprache Rust in der Systemprogrammierung auf das Niveau von C zu bringen.

In der sich im Aufbau befindenden Arbeitsgruppe werden Rust-Entwickler gemeinsam mit Ingenieuren von Intel Spezifikationen erstellen, die die Funktionalität definieren, die in Rust für die Systemprogrammierung implementiert werden muss. Systemprogrammierung erfordert häufig niedriglevelige Manipulationen, wie das Ausführen privilegierter Prozessorinstruktionen und das Abrufen detaillierter Informationen über den Zustand des Prozessors. Zu den bereits für Rust entwickelten ähnlichen Funktionen gehören die Unterstützung von unbenannten Strukturen, Vereinigungen (union), Assembler-Einfügungen (Makro „asm!“) und der BFLOAT16-Gleitkommazahlenformat.

Josh ist überzeugt, dass die Zukunft der Systemprogrammierung bei Rust liegt, während die Sprache C in der heutigen Zeit den Platz einnimmt, den früher Assemblersprachen hatten.
nicht nur befreit es Entwickler von den typischen C-Problemen, die aus der niedrigstufigen Speicherverwaltung resultieren, sondern ermöglicht auch die Anwendung moderner Programmierparadigmen.

Im Verlauf Diskussion eines Vortrags
äußerte Josh die Idee, der Linux-Kernel-Entwicklung die Möglichkeit hinzuzufügen, Treiber in Rust zu entwickeln. Dies würde es ermöglichen, sicherere und qualitativ hochwertigere Treiber mit minimalem Aufwand zu erstellen, die von Problemen wie der Zugriffsberechtigung nach der Freigabe von Speicher, dem Dereferenzieren von Nullzeigern und Buffer Overflow befreit sind.

Greg Kroah-Hartman, der für die Unterstützung des stabilen Linux-Kernel-Zweigs verantwortlich ist, hat seine Bereitschaft erklärt, ein Framework zur Entwicklung von Treibern in Rust in den Kernel aufzunehmen, wenn es tatsächlich Vorteile gegenüber C bietet, z. B. sichere Wrapper über die Kernel-API bereitstellt. Darüber hinaus betrachtet Greg dieses Framework nur als Option, die nicht standardmäßig aktiviert ist, um Rust nicht zu einer der Build-Abhängigkeiten des Kernels zu machen.

Es stellte sich heraus, dass mehrere Teams bereits in diesem Bereich tätig sind. Zum Beispiel Entwickler von der Firma „Fish in a Barrel“ wir haben ein Werkzeug zur Erstellung von ladbaren Modulen für den Linux-Kernel in der Programmiersprache Rust, das abstrahierte Schichten über den Schnittstellen und Strukturen des Kernels zur Erhöhung der Sicherheit verwendet. Diese Schichten werden automatisch auf Basis der vorhandenen Header-Dateien des Kernels mit Hilfe des Tools bindgen. Für das Zusammenstellen der Schichten wird Clang verwendet. Die erstellten Module nutzen zusätzlich zu den Schichten das Paket staticlib.

Parallel dazu seit Sommer 2016). Bis Ende 2019 ist die Veröffentlichung einer weiteren experimentellen Version der GTK 3.9x-Reihe geplant, gefolgt von einem finalen Testrelease von GTK 3.99 im Frühling 2020, das alle angestrebten Funktionen enthalten wird. Die Veröffentlichung von GTK 4 wird für Anfang Herbst 2020 erwartet, zeitgleich mit GNOME 3.38. ein weiteres Projekt, das sich auf die Entwicklung von Treibern für eingebettete Systeme und IoT-Geräte konzentriert und ebenfalls bindgen zur Generierung von Schichten basierend auf den Header-Dateien des Kernels verwendet. Das Framework ermöglicht eine verbesserte Sicherheit der Treiber, ohne Änderungen am Kernel vorzunehmen — anstatt zusätzliche Isolationsschichten im Kernel zu schaffen, wird vorgeschlagen, Probleme bereits während des Kompilierungsprozesses zu blockieren, indem eine sicherere Sprache wie Rust verwendet wird. Es wird erwartet, dass ein solcher Ansatz bei Hardwareherstellern, die proprietäre Treiber schnell und ohne angemessene Überprüfung entwickeln, auf Interesse stößt.

Nicht alle geplanten Funktionen sind bereits umgesetzt, aber das Framework ist bereits gut genug für den Einsatz und wurde zur Erstellung eines funktionierenden Treibers für den Ethernet-Controller LAN9512 USB verwendet, der auf der Raspberry Pi 3 Platine bereitgestellt wird. Als Referenzimplementierung für die Erstellung des Rust-Treibers diente der bestehende smsc95xx-Treiber, der in C geschrieben wurde. Es wird festgestellt, dass die Größe des Moduls und die Overheads durch Runtime-Komponenten bei der Entwicklung des Treibers in Rust gering sind, was es ermöglicht, das Framework auch für ressourcenbeschränkte Geräte zu nutzen.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster