Raamistik turvaliste draiverite kirjutamiseks Linuxi kernelile Rustis

Josh Triplett, kes töötab Intelis ja on Crates.io arendamist jälgivas komisjonis, kõneles avatud lähtekoodiga tehnoloogia tippkohtumisel tutvustatud töörühm, mille eesmärk oli viia Rust keel võrdväärseks C-keelega süsteemide programmeerimise valdkonnas.

Koostamisel olevas töörühmas valmistavad Rusti arendajad koos Inteli inseneridega ette spetsifikatsioonid, mis määratlevad funktsioonid, mida tuleb Rustis süsteemide programmeerimiseks rakendada. Süsteemi programmeerimine nõuab sageli madala tasemega manipuleerimist, näiteks privilegeeritud protsessori käskude täitmist ja üksikasjaliku teabe hankimist protsessori oleku kohta. Sarnastest funktsioonidest, mida Rusti jaoks juba arendatakse, on märgitud nimetute struktuuride, liitude, montaažikeele lisade (“asm!” makro) ja BFLOAT16 ujukomanumbrite vormingu tugi.

Josh usub, et süsteemi programmeerimise tulevik kuulub Rustile ja C-keel tänapäeva reaalsuses pretendeerib kohale, mille viimastel aastatel oli hõivanud Assembly. Rooste
mitte ainult ei vabasta arendajaid C-keelele omastest probleemidest, mis tekivad madala tasemega töötamise tõttu mäluga, vaid annab ka võimaluse seda kasutada kaasaegsete programmeerimisparadigmade väljatöötamisel.

Ajal arutelud etendused
Josh tuli välja ideega lisada võimalus arendada Linuxi kerneli draivereid Rust keeles, mis võimaldaks luua turvalisemaid ja paremaid draivereid minimaalse pingutusega, ilma probleemideta, nagu mälu juurdepääs pärast vabastamist, null osuti viited ja puhvri ületamised.

Greg Kroah-Hartman, kes vastutab Linuxi tuuma stabiilse haru hooldamise eest, väljendas valmisolekut lisada tuumale Rust-keeles draiverite arendamise raamistik, kui sellel on C-ga võrreldes reaalseid eeliseid, näiteks pakub see turvalise sidumised üle Kernel API. Lisaks peab Greg seda raamistikku ainult valikuks, mis ei ole vaikimisi aktiivne, et mitte kaasata Rusti kernelist ehitussõltuvusse.

Selgus, et selles suunas tegutsevad juba mitmed meeskonnad. Näiteks arendajad ettevõttest “Fish in a Barrel” ette valmistatud tööriistakomplekt Linuxi kerneli laaditavate moodulite kirjutamiseks Rust keeles, kasutades turvalisuse suurendamiseks abstraktsete kihtide komplekti liideste ja kerneli struktuuride kohal. Kihid genereeritakse automaatselt olemasolevate kerneli päisefailide põhjal utiliidi abil bindgen. Clangi kasutatakse kihtide ehitamiseks. Lisaks vahekihtidele kasutatakse kokkupandud moodulites paketti staticlib.

Paralleelne areneb Teine projekt keskendus manustatud süsteemide ja asjade Interneti-seadmete draiverite väljatöötamisele, mis samuti kasutab bindgeni kerneli päisefailide põhjal kihtide loomiseks. Raamistik võimaldab teil parandada draiverite turvalisust ilma kernelis muudatusi tegemata – selle asemel, et luua kernelis draiveritele täiendavaid isolatsioonitasemeid, tehakse ettepanek blokeerida probleemid kompileerimisetapis, kasutades turvalisemat Rusti keelt. Eeldatakse, et sellist lähenemist võivad nõuda seadmete tootjad, kes töötavad kiirustades välja patenteeritud draivereid ilma korralikku auditit läbi viimata.

Kõiki kavandatud funktsioone pole veel rakendatud, kuid raamistik on juba tööks üsna sobiv ja seda kasutati Raspberry Pi 9512 plaadiga kaasas oleva USB Etherneti kontrolleri LAN3 jaoks töötava draiveri kirjutamiseks. Olemasolev smsc95xx draiver, mille kirjutas C keel. Tuleb märkida, et mooduli suurus ja käitusaegsete komponentide üldkulud on Rustis draiveri arendamisel ebaolulised, mis võimaldab raamistikku kasutada piiratud ressurssidega seadmete jaoks.

Allikas: opennet.ru

Lisa kommentaar