Kerangka untuk menulis driver aman untuk kernel Linux di Rust

Josh Triplett, yang bekerja di Intel dan merupakan anggota komite yang mengawasi pengembangan Crates.io, berbicara di Open Source Technology Summit diperkenalkan sebuah kelompok kerja yang bertujuan untuk menyamakan bahasa Rust dengan bahasa C di bidang pemrograman sistem.

Dalam kelompok kerja yang sedang dalam proses pembuatan, pengembang Rust bersama dengan insinyur dari Intel akan menyiapkan spesifikasi yang menjelaskan fungsionalitas yang perlu diterapkan di Rust untuk pemrograman sistem. Pemrograman sistem sering kali memerlukan manipulasi tingkat rendah, seperti menjalankan instruksi prosesor yang memiliki hak istimewa dan memperoleh informasi rinci tentang status prosesor. Dari fitur serupa yang telah dikembangkan untuk Rust, dukungan untuk struktur yang tidak disebutkan namanya, gabungan, penyisipan bahasa assembly (makro β€œasm!”) dan format angka floating point BFLOAT16 dicatat.

Josh percaya bahwa masa depan pemrograman sistem adalah milik Rust, dan bahasa C dalam realitas modern mengklaim tempat yang ditempati oleh Majelis di tahun-tahun sebelumnya. Karat
tidak hanya meringankan pengembang dari masalah yang melekat pada bahasa C yang timbul karena pekerjaan tingkat rendah dengan memori, tetapi juga memberikan kesempatan untuk menggunakannya dalam pengembangan paradigma pemrograman modern.

Selama diskusi pertunjukan
Josh mendapat ide untuk menambahkan kemampuan untuk mengembangkan driver di kernel Linux dalam bahasa Rust, yang memungkinkan pembuatan driver yang lebih aman dan lebih baik dengan sedikit usaha, bebas dari masalah seperti akses memori setelah dibebaskan, null dereferensi pointer, dan buffer overruns.

Greg Kroah-Hartman, yang bertanggung jawab untuk menjaga kestabilan cabang kernel Linux, menyatakan kesiapannya untuk menambahkan kerangka kerja untuk mengembangkan driver dalam bahasa Rust ke kernel jika memiliki keunggulan nyata dibandingkan C, misalnya akan memberikan keamanan. pengikatan melalui Kernel API. Selain itu, Greg menganggap framework ini hanya sebagai opsi, tidak aktif secara default, agar tidak menyertakan Rust sebagai dependensi build pada kernel.

Ternyata beberapa tim sudah bekerja ke arah ini. Misalnya, pengembang dari perusahaan β€œFish in a Barrel” siap sebuah toolkit untuk menulis modul yang dapat dimuat untuk kernel Linux dalam bahasa Rust, menggunakan sekumpulan lapisan abstrak pada antarmuka dan struktur kernel untuk meningkatkan keamanan. Lapisan secara otomatis dihasilkan berdasarkan file header kernel yang ada menggunakan utilitas pengikatan. Dentang digunakan untuk membangun lapisan. Selain interlayer, modul yang dirakit menggunakan paket staticlib.

Paralel sedang berkembang Proyek lain berfokus pada pengembangan driver untuk sistem tertanam dan perangkat IoT, yang juga menggunakan bindgen untuk menghasilkan lapisan berdasarkan file header kernel. Kerangka kerja ini memungkinkan Anda untuk meningkatkan keamanan driver tanpa membuat perubahan pada kernel - alih-alih membuat tingkat isolasi tambahan untuk driver di kernel, diusulkan untuk memblokir masalah pada tahap kompilasi, menggunakan bahasa Rust yang lebih aman. Diasumsikan bahwa pendekatan seperti itu mungkin dibutuhkan oleh produsen peralatan yang mengembangkan driver berpemilik secara terburu-buru tanpa melakukan audit yang tepat.

Belum semua fungsi yang dimaksudkan telah diimplementasikan, tetapi kerangka kerja ini sudah cukup cocok untuk bekerja dan digunakan untuk menulis driver yang berfungsi untuk pengontrol Ethernet USB LAN9512 yang disertakan dalam papan Raspberry Pi 3. Driver smsc95xx yang ada, ditulis oleh di bahasa C. Perlu dicatat bahwa ukuran modul dan overhead dari komponen runtime saat mengembangkan driver di Rust tidak signifikan, sehingga kerangka kerja ini dapat digunakan untuk perangkat dengan sumber daya terbatas.

Sumber: opennet.ru

Tambah komentar