Framework pro zápis bezpečných ovladačů pro linuxové jádro v Rustu

Josh Triplett, který pracuje ve společnosti Intel a je ve výboru dohlížejícím na vývoj Crates.io, vystoupil na Open Source Technology Summit představen pracovní skupina, jejímž cílem je přivést jazyk Rust k rovnoprávnosti s jazykem C v oblasti systémového programování.

V pracovní skupině, která se právě vytváří, připraví vývojáři Rustu spolu s inženýry z Intelu specifikace definující funkcionalitu, kterou je třeba do Rustu implementovat pro systémové programování. Programování systému často vyžaduje manipulaci na nízké úrovni, jako je provádění instrukcí privilegovaného procesoru a získávání podrobných informací o stavu procesoru. Z podobných funkcí, které jsou již vyvíjeny pro Rust, je zmíněna podpora nepojmenovaných struktur, sjednocení, vložení jazyka symbolických instrukcí (makro „asm!“) a formát čísel s plovoucí desetinnou čárkou BFLOAT16.

Josh věří, že budoucnost systémového programování patří Rustu, a jazyk C si v moderní realitě dělá nárok na místo, které v minulých letech zaujímalo Assembly. Rez
nejenže zbavuje vývojáře problémů spojených s jazykem C, které vznikají kvůli nízkoúrovňové práci s pamětí, ale také poskytuje možnost ji využít při vývoji moderních programovacích paradigmat.

Během diskuse představení
Josh přišel s myšlenkou přidat možnost vyvíjet ovladače v linuxovém jádře v jazyce Rust, což by umožnilo vytvářet bezpečnější a lepší ovladače s minimálním úsilím, bez problémů, jako je přístup k paměti po uvolnění, null dereference ukazatele a přetečení vyrovnávací paměti.

Greg Kroah-Hartman, který je zodpovědný za udržování stabilní větve linuxového jádra, vyjádřil svou připravenost přidat do jádra framework pro vývoj ovladačů v jazyce Rust, pokud bude mít skutečné výhody oproti C, například bude poskytovat bezpečné vazby přes Kernel API. Greg navíc považuje tento rámec pouze za možnost, ve výchozím nastavení není aktivní, aby nezahrnul Rust jako závislost sestavení na jádře.

Ukázalo se, že tímto směrem již pracuje několik týmů. Například vývojáři ze společnosti „Fish in a Barrel“ připravený sada nástrojů pro psaní načítatelných modulů pro jádro Linuxu v jazyce Rust využívající sadu abstraktních vrstev nad rozhraními a strukturami jádra ke zvýšení bezpečnosti. Vrstvy jsou automaticky generovány na základě existujících souborů hlaviček jádra pomocí nástroje bindgen. Clang se používá k vytváření vrstev. Kromě mezivrstev používají sestavené moduly balíček staticlib.

Paralelní se vyvíjí Další projekt se zaměřil na vývoj ovladačů pro vestavěné systémy a zařízení IoT, který také využívá bindgen ke generování vrstev založených na hlavičkových souborech jádra. Rámec vám umožňuje zlepšit zabezpečení ovladačů bez provádění změn v jádře – namísto vytváření dalších úrovní izolace pro ovladače v jádře se navrhuje blokovat problémy ve fázi kompilace pomocí bezpečnějšího jazyka Rust. Předpokládá se, že takový přístup mohou vyžadovat výrobci zařízení, kteří ve spěchu vyvíjejí proprietární ovladače, aniž by provedli řádný audit.

Ne všechny zamýšlené funkcionality ještě nebyly implementovány, ale framework je již docela vhodný pro práci a byl použit pro napsání funkčního ovladače pro LAN9512 USB Ethernet řadič dodávaný v desce Raspberry Pi 3. Stávající ovladač smsc95xx, napsaný v jazyk C. Je třeba poznamenat, že velikost modulu a režie z runtime komponent při vývoji ovladače v Rustu jsou nevýznamné, což umožňuje použití frameworku pro zařízení s omezenými zdroji.

Zdroj: opennet.ru

Přidat komentář