Cadru pentru scrierea driverelor securizate pentru nucleul Linux în Rust

Josh Triplett, care lucrează la Intel și face parte din comitetul care supraveghează dezvoltarea Crates.io, vorbind la Open Source Technology Summit a prezentat un grup de lucru care vizează aducerea limbajului Rust la paritate cu limbajul C în domeniul programării sistemelor.

Într-un grup de lucru care este în curs de creare, dezvoltatorii Rust, împreună cu inginerii de la Intel, vor pregăti specificații care definesc funcționalitatea care trebuie implementată în Rust pentru programarea sistemelor. Programarea sistemului necesită adesea manipulare la nivel scăzut, cum ar fi executarea instrucțiunilor procesorului privilegiat și obținerea de informații detaliate despre starea procesorului. Dintre caracteristicile similare deja dezvoltate pentru Rust, se remarcă suportul pentru structuri fără nume, uniuni, inserții în limbaj de asamblare (macrosoft „asm!”) și formatul de număr în virgulă mobilă BFLOAT16.

Josh crede că viitorul programării sistemului îi aparține lui Rust, iar limbajul C în realitățile moderne revendică locul pe care în anii trecuți a fost ocupat de Assembly. Rugini
nu numai că scutește dezvoltatorii de problemele inerente limbajului C care apar din cauza lucrului la nivel scăzut cu memoria, dar oferă și posibilitatea de a o utiliza în dezvoltarea paradigmelor moderne de programare.

În timpul discuții spectacole
Josh a venit cu ideea de a adăuga posibilitatea de a dezvolta drivere în nucleul Linux în limbajul Rust, ceea ce ar face posibilă crearea de drivere mai sigure și mai bune cu efort minim, fără probleme precum accesul la memorie după eliberare, nul. dereferențele pointerului și depășirile de buffer.

Greg Kroah-Hartman, care este responsabil pentru menținerea ramurii stabile a nucleului Linux, și-a exprimat disponibilitatea de a adăuga un cadru pentru dezvoltarea driverelor în limbajul Rust la kernel, dacă are avantaje reale față de C, de exemplu, va oferi siguranță. legături peste Kernel API. În plus, Greg consideră acest cadru doar ca o opțiune, neactivă implicit, pentru a nu include Rust ca dependență de build de kernel.

S-a dovedit că mai multe echipe lucrează deja în această direcție. De exemplu, dezvoltatorii companiei „Fish in a Barrel” pregătit un set de instrumente pentru scrierea modulelor încărcate pentru nucleul Linux în limbajul Rust, folosind un set de straturi abstracte peste interfețe și structuri de kernel pentru a crește securitatea. Straturile sunt generate automat pe baza fișierelor de antet existente ale nucleului folosind utilitarul bindgen. Clang este folosit pentru a construi straturi. Pe lângă straturile intermediare, modulele asamblate folosesc pachetul staticlib.

Paralel se dezvoltă Un alt proiect s-a concentrat pe dezvoltarea de drivere pentru sisteme încorporate și dispozitive IoT, care utilizează, de asemenea, Bindgen pentru a genera straturi bazate pe fișierele de antet ale nucleului. Cadrul vă permite să îmbunătățiți securitatea driverului fără a face modificări la kernel - în loc să creați niveluri de izolare suplimentare pentru driverele din nucleu, se propune să blocați problemele în etapa de compilare, folosind limbajul Rust mai sigur. Se presupune că o astfel de abordare poate fi solicitată de către producătorii de echipamente care dezvoltă drivere proprietare în grabă, fără a efectua un audit adecvat.

Nu toată funcționalitatea dorită a fost încă implementată, dar cadrul este deja destul de potrivit pentru lucru și a fost folosit pentru a scrie un driver de lucru pentru controlerul LAN9512 USB Ethernet furnizat în placa Raspberry Pi 3. Driverul smsc95xx existent, scris de în limbajul C. Se remarcă faptul că dimensiunea modulului și supraîncărcarea de la componentele runtime atunci când se dezvoltă un driver în Rust sunt nesemnificative, ceea ce permite ca cadrul să fie utilizat pentru dispozitive cu resurse limitate.

Sursa: opennet.ru

Adauga un comentariu