Framework voor het schrijven van veilige stuurprogramma's voor de Linux-kernel in Rust

Josh Triplett, die bij Intel werkt en lid is van de commissie die toezicht houdt op de ontwikkeling van Crates.io, spreekt op de Open Source Technology Summit ingediend een werkgroep die erop gericht is de Rust-taal op één lijn te brengen met de C-taal op het gebied van systeemprogrammering.

In een werkgroep die momenteel wordt opgericht, zullen Rust-ontwikkelaars, samen met ingenieurs van Intel, specificaties opstellen die de functionaliteit definiëren die in Rust moet worden geïmplementeerd voor systeemprogrammering. Systeemprogrammering vereist vaak manipulatie op laag niveau, zoals het uitvoeren van bevoorrechte processorinstructies en het verkrijgen van gedetailleerde informatie over de status van de processor. Van de vergelijkbare functies die al voor Rust worden ontwikkeld, wordt ondersteuning voor naamloze structuren, unies, invoegingen in assembleertaal (de "asm!"-macro) en het BFLOAT16 drijvende-kommagetalformaat vermeld.

Josh gelooft dat de toekomst van systeemprogrammering aan Rust toebehoort, en dat de C-taal in de moderne realiteit de plaats claimt die de afgelopen jaren werd ingenomen door Assembly. Roest
verlost ontwikkelaars niet alleen van de problemen die inherent zijn aan de C-taal en die ontstaan ​​​​door het werken op laag niveau met geheugen, maar biedt ook de mogelijkheid om het te gebruiken bij de ontwikkeling van moderne programmeerparadigma's.

Gedurende discussies optredens
Josh kwam op het idee om de mogelijkheid toe te voegen om stuurprogramma's in de Linux-kernel te ontwikkelen in de Rust-taal, wat het mogelijk zou maken om met minimale inspanning veiligere en betere stuurprogramma's te maken, vrij van problemen zoals geheugentoegang na het vrijmaken, null pointer-dereferenties en bufferoverruns.

Greg Kroah-Hartman, die verantwoordelijk is voor het onderhouden van de stabiele tak van de Linux-kernel, sprak zijn bereidheid uit om een ​​raamwerk voor het ontwikkelen van stuurprogramma's in de Rust-taal aan de kernel toe te voegen als dit echte voordelen heeft ten opzichte van C, het zal bijvoorbeeld veilige bindingen via Kernel API. Bovendien beschouwt Greg dit raamwerk alleen als een optie, en niet standaard actief, om Rust niet op te nemen als een build-afhankelijkheid van de kernel.

Het bleek dat verschillende teams al in deze richting werken. Bijvoorbeeld ontwikkelaars van het bedrijf "Fish in a Barrel" bereid een toolkit voor het schrijven van laadbare modules voor de Linux-kernel in de Rust-taal, waarbij een reeks abstracte lagen over de interfaces en kernelstructuren wordt gebruikt om de veiligheid te vergroten. Met behulp van het hulpprogramma worden lagen automatisch gegenereerd op basis van de bestaande kernelheaderbestanden binden. Clang wordt gebruikt om lagen op te bouwen. Naast tussenlagen gebruiken de samengestelde modules het staticlib-pakket.

Parallel ontwikkeld zich Een ander project richtte zich op het ontwikkelen van stuurprogramma's voor ingebedde systemen en IoT-apparaten, waarbij ook bindgen wordt gebruikt om lagen te genereren op basis van kernelheaderbestanden. Met het raamwerk kun je de beveiliging van stuurprogramma's verbeteren zonder wijzigingen aan de kernel aan te brengen - in plaats van extra isolatieniveaus voor stuurprogramma's in de kernel te creëren, wordt voorgesteld om problemen in de compilatiefase te blokkeren, met behulp van de veiligere Rust-taal. Aangenomen wordt dat een dergelijke aanpak veel gevraagd is bij fabrikanten van apparatuur die in haast eigen stuurprogramma's ontwikkelen zonder een behoorlijke audit uit te voeren.

Nog niet alle beoogde functionaliteit is geïmplementeerd, maar het raamwerk is al redelijk geschikt voor werk en werd gebruikt om een ​​werkende driver te schrijven voor de LAN9512 USB Ethernet-controller die in het Raspberry Pi 3-bord wordt geleverd. De bestaande smsc95xx-driver, geschreven door in C-taal. Opgemerkt wordt dat de modulegrootte en overhead van runtime-componenten bij het ontwikkelen van een stuurprogramma in Rust onbeduidend zijn, waardoor het raamwerk kan worden gebruikt voor apparaten met beperkte bronnen.

Bron: opennet.ru

Voeg een reactie