Raamwerk vir die skryf van veilige drywers vir die Linux-kern in Rust

Josh Triplett, wat by Intel werk en op die komitee is wat toesig hou oor die ontwikkeling van Crates.io, praat by die Open Source Technology Summit voorgelê 'n werkgroep wat daarop gemik is om die Rust-taal in gelykheid te bring met die C-taal op die gebied van stelselprogrammering.

In 'n werkgroep wat in die proses is om geskep te word, sal Rust-ontwikkelaars, saam met ingenieurs van Intel, spesifikasies voorberei wat die funksionaliteit definieer wat in Rust geïmplementeer moet word vir stelselprogrammering. Stelselprogrammering vereis dikwels laevlak-manipulasie, soos die uitvoering van bevoorregte verwerkerinstruksies en die verkryging van gedetailleerde inligting oor die toestand van die verwerker. Van die soortgelyke kenmerke wat reeds vir Rust ontwikkel word, word ondersteuning vir naamlose strukture, vakbonde, samestellingstaalinvoegsels (die "asm!"-makro) en die BFLOAT16 swewendepuntgetalformaat opgemerk.

Josh glo dat die toekoms van stelselprogrammering aan Rust behoort, en die C-taal in moderne realiteite maak aanspraak op die plek wat die afgelope jare deur Assembly ingeneem is. Roes
verlig nie net ontwikkelaars van die probleme inherent aan die C-taal wat ontstaan ​​as gevolg van laevlakwerk met geheue nie, maar bied ook die geleentheid om dit te gebruik in die ontwikkeling van moderne programmeringsparadigmas.

Tydens besprekings optredes
Josh het met die idee vorendag gekom om die vermoë by te voeg om drywers in die Linux-kern in die Rust-taal te ontwikkel, wat dit moontlik sou maak om veiliger en beter drywers met minimale moeite te skep, vry van probleme soos geheuetoegang na vrystelling, null wyserverwysings en bufferoorskryding.

Greg Kroah-Hartman, wat verantwoordelik is vir die instandhouding van die stabiele tak van die Linux-kern, het sy gereedheid uitgespreek om 'n raamwerk vir die ontwikkeling van drywers in die Rust-taal by die kern te voeg as dit werklike voordele bo C het, byvoorbeeld, dit sal veilige bindings oor Kernel API. Daarbenewens beskou Greg hierdie raamwerk slegs as 'n opsie, nie by verstek aktief nie, om Rust nie as 'n bouafhanklikheid van die kern in te sluit nie.

Dit het geblyk dat verskeie spanne reeds in hierdie rigting werk. Byvoorbeeld, ontwikkelaars van die maatskappy "Fish in a Barrel" voorberei 'n gereedskapstel vir die skryf van laaibare modules vir die Linux-kern in die Rust-taal, met behulp van 'n stel abstrakte lae oor die koppelvlakke en kernstrukture om sekuriteit te verhoog. Lae word outomaties gegenereer op grond van die bestaande kernkop-lêers met behulp van die nut bindgen. Clang word gebruik om lae te bou. Benewens tussenlae, gebruik die saamgestelde modules die staticlib-pakket.

Parallel ontwikkel Nog 'n projek het gefokus op die ontwikkeling van drywers vir ingebedde stelsels en IoT-toestelle, wat ook bindgen gebruik om lae te genereer gebaseer op kernkoplêers. Die raamwerk laat jou toe om bestuurdersekuriteit te verbeter sonder om veranderinge aan die kern aan te bring - in plaas daarvan om bykomende isolasievlakke vir bestuurders in die kern te skep, word voorgestel om probleme in die samestellingstadium te blokkeer deur die veiliger Rust-taal te gebruik. Daar word aanvaar dat so 'n benadering in aanvraag kan wees deur toerustingvervaardigers wat inderhaas eie drywers ontwikkel sonder om 'n behoorlike oudit uit te voer.

Nie al die beoogde funksionaliteit is nog geïmplementeer nie, maar die raamwerk is reeds redelik geskik vir werk en is gebruik om 'n werkende drywer te skryf vir die LAN9512 USB Ethernet-beheerder wat in die Raspberry Pi 3-bord voorsien word. Die bestaande smsc95xx-drywer, geskryf deur in C taal. Daar word kennis geneem dat die modulegrootte en oorhoofse koste van looptydkomponente by die ontwikkeling van 'n drywer in Rust onbeduidend is, wat toelaat dat die raamwerk gebruik word vir toestelle met beperkte hulpbronne.

Bron: opennet.ru

Voeg 'n opmerking