Okvir za pisanje sigurnih drajvera za Linux kernel u Rustu

Josh Triplett, koji radi u Intelu i član je odbora koji nadgleda razvoj Crates.io, govoreći na Open Source Technology Summitu uveo radna grupa koja je imala za cilj da dovede Rust jezik u paritet sa jezikom C u oblasti sistemskog programiranja.

U radnoj grupi koja je u procesu kreiranja, Rust programeri će zajedno sa inženjerima iz Intela pripremiti specifikacije koje definišu funkcionalnost koju je potrebno implementirati u Rust za sistemsko programiranje. Sistemsko programiranje često zahteva manipulaciju niskog nivoa, kao što je izvršavanje privilegovanih instrukcija procesora i dobijanje detaljnih informacija o stanju procesora. Od sličnih karakteristika koje su već razvijene za Rust, primećuje se podrška za neimenovane strukture, sindikate, umetke asemblerskog jezika (makro „asm!“) i format brojeva s pomičnim zarezom BFLOAT16.

Josh smatra da budućnost sistemskog programiranja pripada Rustu, a jezik C u modernoj stvarnosti zauzima mjesto koje je proteklih godina zauzimao Assembly. Rust
ne samo da oslobađa programere od problema svojstvenih jeziku C koji nastaju zbog rada na niskom nivou sa memorijom, već takođe pruža mogućnost da je koriste u razvoju modernih programskih paradigmi.

Tokom rasprave predstave
Josh je došao na ideju dodavanja mogućnosti razvoja drajvera u jezgru Linuxa na Rust jeziku, što bi omogućilo stvaranje sigurnijih i boljih drajvera uz minimalan napor, bez problema kao što je pristup memoriji nakon oslobađanja, null dereferenciranja pokazivača i prekoračenja bafera.

Greg Kroah-Hartman, koji je odgovoran za održavanje stabilne grane Linux kernela, izrazio je spremnost da kernelu doda okvir za razvoj drajvera na Rust jeziku ako ima stvarne prednosti u odnosu na C, na primjer, obezbijediće siguran vezivanja preko Kernel API-ja. Osim toga, Greg ovaj okvir razmatra samo kao opciju, a nije aktivan prema zadanim postavkama, kako ne bi uključio Rust kao zavisnost izgradnje od kernela.

Ispostavilo se da nekoliko timova već radi u tom pravcu. Na primjer, programeri iz kompanije "Fish in a Barrel" pripremljeno komplet alata za pisanje učitavih modula za Linux kernel u Rust jeziku, koristeći skup apstraktnih slojeva preko interfejsa i struktura kernela radi povećanja sigurnosti. Slojevi se automatski generišu na osnovu postojećih datoteka zaglavlja kernela pomoću uslužnog programa bindgen. Clang se koristi za izgradnju slojeva. Pored međuslojeva, sklopljeni moduli koriste paket staticlib.

Paralelno se razvija Drugi projekat fokusiran je na razvoj drajvera za ugrađene sisteme i IoT uređaje, koji takođe koristi bindgen za generisanje slojeva zasnovanih na datotekama zaglavlja kernela. Okvir vam omogućava da poboljšate sigurnost drajvera bez mijenjanja kernela - umjesto stvaranja dodatnih nivoa izolacije za drajvere u kernelu, predlaže se blokiranje problema u fazi kompilacije, koristeći sigurniji Rust jezik. Pretpostavlja se da bi takav pristup mogao biti tražen od strane proizvođača opreme koji u žurbi razvijaju vlasničke drajvere bez provođenja odgovarajuće revizije.

Još uvijek nisu implementirane sve predviđene funkcionalnosti, ali okvir je već prilično pogodan za rad i korišten je za pisanje radnog drajvera za LAN9512 USB Ethernet kontroler koji se isporučuje na ploči Raspberry Pi 3. Postojeći drajver smsc95xx, koji je napisao u C jezik. Primjećuje se da su veličina modula i dodatni troškovi iz runtime komponenti pri razvoju drajvera u Rustu beznačajni, što omogućava korištenje okvira za uređaje sa ograničenim resursima.

izvor: opennet.ru

Dodajte komentar