Framework para sa pagsusulat ng mga secure na driver para sa Linux kernel sa Rust

Josh Triplett, na nagtatrabaho sa Intel at nasa komite na nangangasiwa sa pagbuo ng Crates.io, nagsasalita sa Open Source Technology Summit ipinakilala isang working group na naglalayong dalhin ang Rust na wika sa pagkakapantay-pantay sa wikang C sa larangan ng programming system.

Sa isang nagtatrabahong grupo na nasa proseso ng paglikha, ang mga developer ng Rust, kasama ang mga inhinyero mula sa Intel, ay maghahanda ng mga detalye na tumutukoy sa functionality na kailangang ipatupad sa Rust para sa programming ng mga system. Ang system programming ay madalas na nangangailangan ng mababang antas ng pagmamanipula, tulad ng pagsasagawa ng mga privileged na tagubilin ng processor at pagkuha ng detalyadong impormasyon tungkol sa estado ng processor. Sa mga katulad na tampok na binuo na para sa Rust, ang suporta para sa hindi pinangalanang mga istruktura, unyon, pagsingit ng wika ng pagpupulong (ang "asm!" macro) at ang format ng numero ng floating point na BFLOAT16 ay nabanggit.

Naniniwala si Josh na ang kinabukasan ng system programming ay pag-aari ng Rust, at ang wikang C sa modernong realidad ay inaangkin ang lugar na noong mga nakaraang taon ay inookupahan ng Assembly. Kalawang
hindi lamang pinapawi ang mga developer mula sa mga problema na likas sa wikang C na lumitaw dahil sa mababang antas ng trabaho na may memorya, ngunit nagbibigay din ng pagkakataong gamitin ito sa pagbuo ng mga modernong paradigms ng programming.

Habang mga talakayan mga pagtatanghal
Nakaisip si Josh ng ideya ng pagdaragdag ng kakayahang bumuo ng mga driver sa Linux kernel sa Rust na wika, na gagawing posible na lumikha ng mas ligtas at mas mahusay na mga driver na may kaunting pagsisikap, walang mga problema tulad ng pag-access sa memorya pagkatapos ng pagpapalaya, null pointer dereferences at buffer overruns.

Si Greg Kroah-Hartman, na responsable sa pagpapanatili ng matatag na sangay ng kernel ng Linux, ay nagpahayag ng kanyang kahandaang magdagdag ng isang balangkas para sa pagbuo ng mga driver sa Rust na wika sa kernel kung ito ay may tunay na mga pakinabang sa C, halimbawa, ito ay magbibigay ng ligtas. mga binding sa Kernel API. Bilang karagdagan, isinasaalang-alang lamang ni Greg ang balangkas na ito bilang isang opsyon, hindi aktibo bilang default, upang hindi maisama ang Rust bilang isang build dependency sa kernel.

Ito ay lumabas na maraming mga koponan ang nagtatrabaho sa direksyon na ito. Halimbawa, ang mga developer mula sa kumpanyang "Fish in a Barrel" nakahanda isang toolkit para sa pagsusulat ng mga na-load na module para sa Linux kernel sa Rust na wika, gamit ang isang set ng abstract layer sa ibabaw ng mga interface at kernel structures upang mapataas ang seguridad. Awtomatikong nabuo ang mga layer batay sa umiiral na mga file ng header ng kernel gamit ang utility bindgen. Ang clang ay ginagamit upang bumuo ng mga layer. Bilang karagdagan sa mga interlayer, ginagamit ng mga naka-assemble na module ang staticlib package.

Kapareho ay umuunlad Ang isa pang proyekto ay nakatuon sa pagbuo ng mga driver para sa mga naka-embed na system at IoT device, na gumagamit din ng bindgen upang bumuo ng mga layer batay sa mga file ng kernel header. Ang balangkas ay nagbibigay-daan sa iyo upang mapabuti ang seguridad ng driver nang hindi gumagawa ng mga pagbabago sa kernel - sa halip na lumikha ng karagdagang mga antas ng paghihiwalay para sa mga driver sa kernel, iminungkahi na harangan ang mga problema sa yugto ng compilation, gamit ang mas secure na Rust na wika. Ipinapalagay na ang ganitong diskarte ay maaaring hinihiling ng mga tagagawa ng kagamitan na nagpapaunlad ng pagmamay-ari na mga driver nang nagmamadali nang hindi nagsasagawa ng tamang pag-audit.

Hindi pa naipatupad ang lahat ng inilaan na pag-andar, ngunit ang balangkas ay angkop na para sa trabaho at ginamit upang magsulat ng gumaganang driver para sa LAN9512 USB Ethernet controller na ibinigay sa board ng Raspberry Pi 3. Ang umiiral na smsc95xx driver, na isinulat ni in C wika. Napansin na ang laki ng module at overhead mula sa mga bahagi ng runtime kapag bumubuo ng isang driver sa Rust ay hindi gaanong mahalaga, na nagpapahintulot sa balangkas na magamit para sa mga device na may limitadong mapagkukunan.

Pinagmulan: opennet.ru

Magdagdag ng komento