用 Rust 為 Linux 核心編寫安全驅動程式的框架

Josh Triplett,在英特爾工作,也是監督 Crates.io 開發的委員會成員,在開源技術高峰會上發表講話 引進 一個工作小組,旨在使 Rust 語言在系統程式設計領域與 C 語言平起平坐。

在正在建立的工作小組中,Rust 開發人員將與英特爾的工程師一起準備規範,定義需要在 Rust 中實現的系統程式設計功能。 系統程式設計通常需要低階操作,例如執行特權處理器指令和取得有關處理器狀態的詳細資訊。 在已經為 Rust 開發的類似功能中,值得注意的是對未命名結構、聯合、組合語言插入(「asm!」巨集)和 BFLOAT16 浮點數格式的支援。

Josh 認為系統程式設計的未來屬於 Rust,而現代現實中的 C 語言正在奪取過去幾年被彙編佔據的位置。 鏽
不僅使開發人員擺脫了 C 語言中由於低階記憶體工作而產生的固有問題,而且還提供了在現代程式設計範例開發中使用它的機會。

期間 討論 表演
Josh 提出了用 Rust 語言在 Linux 核心中添加開發驅動程式的能力的想法,這將使得能夠以最小的努力創建更安全、更好的驅動程序,並且不會出現釋放後內存訪問、null 等問題。指標解引用和緩衝區溢位。

負責維護 Linux 內核穩定分支的 Greg Kroah-Hartman 表示,如果 Rust 語言比 C 語言具有真正的優勢,他願意將用於開發驅動程式的框架添加到核心中,例如,它將提供安全的支援。透過內核API 進行綁定。 此外,Greg 認為該框架僅作為一個選項,預設不處於活動狀態,以免將 Rust 包含為對核心的建置依賴項。

事實證明,已有多個團隊朝著這個方向努力。 例如,「Fish in a Barrel」公司的開發人員 準備好了 一個用 Rust 語言為 Linux 核心編寫可載入模組的工具包,在介面和核心結構上使用一組抽象層來提高安全性。 使用該實用程式根據現有核心頭檔自動生成層 賓根。 Clang 用於建構層。 除了中間層之外,組裝的模組還使用 staticlib 套件。

平行線 發展 另一個專案則專注於為嵌入式系統和物聯網設備開發驅動程序,該專案也使用bindgen根據核心頭檔產生層。 該框架允許您在不更改核心的情況下提高驅動程式安全性 - 建議使用更安全的 Rust 語言在編譯階段阻止問題,而不是在核心中為驅動程式建立額外的隔離等級。 假設設備製造商可能需要這樣的方法,即在沒有進行適當審核的情況下匆忙開發專有驅動程式。

尚未實現所有預期功能,但該框架已經非常適合工作,並用於為 Raspberry Pi 9512 板中提供的 LAN3 USB 乙太網路控制器編寫工作驅動程式。現有的 smsc95xx 驅動程式由C語言。 值得注意的是,在 Rust 中開發驅動程式時,模組大小和運行時元件的開銷是微不足道的,這使得該框架可以用於資源有限的設備。

來源: opennet.ru

添加評論