Keretrendszer biztonságos illesztőprogramok írásához a Linux kernelhez Rustban

Josh Triplett, aki az Intelnél dolgozik, és a Crates.io fejlesztését felügyelő bizottság tagja, felszólalt a nyílt forráskódú technológiai csúcstalálkozón benyújtott egy munkacsoport, amelynek célja a Rust nyelv és a C nyelv paritásba hozása a rendszerprogramozás területén.

A készülő munkacsoportban a Rust fejlesztői az Intel mérnökeivel együtt specifikációkat készítenek, amelyek meghatározzák a Rust rendszerprogramozáshoz szükséges funkcionalitását. A rendszerprogramozás gyakran alacsony szintű manipulációt igényel, például privilegizált processzorutasítások végrehajtását és részletes információk megszerzését a processzor állapotáról. A Rust számára már kifejlesztett hasonló szolgáltatások közül említésre méltó a névtelen struktúrák, uniók, assembly nyelvi betétek (az „asm!” makró) és a BFLOAT16 lebegőpontos számformátum támogatása.

Josh úgy véli, hogy a rendszerprogramozás jövője Rust-é, és a C nyelv a modern valóságban azt a helyet foglalja el, amelyet az elmúlt években az Assembly foglalt el. Rozsda
nemcsak a C nyelvben rejlő problémák alól mentesíti a fejlesztőket, amelyek a memóriával való alacsony szintű munka miatt merülnek fel, hanem lehetőséget ad annak felhasználására a modern programozási paradigmák fejlesztésében.

Alatt megbeszélések előadások
Josh azzal az ötlettel állt elő, hogy hozzáadja az illesztőprogramok fejlesztésének lehetőségét a Linux kernelhez Rust nyelven, ami lehetővé tenné biztonságosabb és jobb illesztőprogramok létrehozását minimális erőfeszítéssel, olyan problémáktól mentesen, mint a memória hozzáférés felszabadítás után, null pointer dereferenciák és puffertúllépések.

Greg Kroah-Hartman, aki a Linux kernel stabil ágának fenntartásáért felelős, kifejezte készségét arra, hogy a rendszermagot a Rust nyelvű illesztőprogramok fejlesztésére szolgáló keretrendszerrel egészítse ki, ha annak valódi előnyei vannak a C-vel szemben, például biztonságos lesz. kötések Kernel API-n keresztül. Ezenkívül Greg ezt a keretrendszert csak opciónak tekinti, alapértelmezés szerint nem aktív, hogy ne vegye fel a Rust-ot a kerneltől való build-függőségként.

Kiderült, hogy már több csapat is ebbe az irányba dolgozik. Például a „Fish in a Barrel” cég fejlesztői előkészített egy eszközkészlet betölthető modulok írásához a Linux kernelhez Rust nyelven, egy sor absztrakt réteg használatával az interfészek és kernelstruktúrák felett a biztonság növelése érdekében. A rétegek automatikusan generálódnak a meglévő kernelfejlécfájlok alapján a segédprogram segítségével bindgen. A Clang rétegek felépítésére szolgál. Az összeállított modulok a közbenső rétegek mellett a staticlib csomagot használják.

Párhuzamos fejlődik Egy másik projekt a beágyazott rendszerek és IoT-eszközök illesztőprogramjainak fejlesztésére összpontosított, amely szintén a bindgen-t használja a kernelfejlécfájlokon alapuló rétegek létrehozására. A keretrendszer lehetővé teszi az illesztőprogramok biztonságának javítását anélkül, hogy a rendszermagot módosítaná – ahelyett, hogy további elkülönítési szinteket hozna létre a rendszermagban az illesztőprogramok számára, javasoljuk, hogy blokkolja a problémákat a fordítási szakaszban a biztonságosabb Rust nyelv használatával. Feltételezhető, hogy a berendezésgyártók igényt tarthatnak erre a megközelítésre, ha sietve, megfelelő audit elvégzése nélkül fejlesztenek szabadalmaztatott illesztőprogramokat.

Még nem valósult meg az összes tervezett funkcionalitás, de a keretrendszer már eléggé alkalmas a munkára, és a Raspberry Pi 9512 kártyához mellékelt LAN3 USB Ethernet vezérlő működőképes illesztőprogramjának írásához használták. A meglévő smsc95xx illesztőprogramot C nyelv. Megjegyzendő, hogy a modul mérete és a futásidejű összetevőkből származó többletköltség az illesztőprogram Rust-ban történő fejlesztésekor jelentéktelen, ami lehetővé teszi a keretrendszer korlátozott erőforrásokkal rendelkező eszközökön történő használatát.

Forrás: opennet.ru

Hozzászólás