深入核心 Linux 6.18 採用 Binder IPC 實現 Android用 Rust 編寫

內核程式碼庫 Linux6.18 版本的基礎是採用用 Rust 語言編寫的 Binder 進程間通訊機制。 Binder 用於… Android 組織進程間互動和遠端方法呼叫(一個進程) Android 可能會呼叫另一個進程中的方法或函數 Android(使用 Binder 來識別、呼叫進程並在進程間傳遞參數)。 Binder 的程式碼已用 Rust 重寫,作為一項旨在提高安全性、推廣安全編程實踐並提高記憶體問題檢測效率的專案的一部分。 Android (約佔所有已識別危險漏洞的70%) Android(由記憶體操作錯誤引起)。

使用 Rust 使我們能夠解決 Binder 開發人員遇到的幾個問題,包括與引用計數、鎖定和邊界檢查相關的錯誤,並顯著降低錯誤處理的複雜性。 Binder 的 Rust 實作與原始 C 實作功能完全相同,並通過了所有 AOSP 測試(Android 開源專案),可用於建立工作版本 Android-韌體.儘管 Rust 驅動程式具有高級功能並支援具有複雜所有權語義的對象,但它比 C 版本要小——5.5 行程式碼對 5.8 行程式碼。

在commit描述中,作者提到了重寫Binder的以下原因:

  • Binder 已經開發了 15 年,在此期間,其功能和複雜性顯著增加——該專案處於所有組件的交匯點。 Android 並且涵蓋了除IPC之外的各種任務:
    • 正確分析和轉換可能包含多個相互作用的不同類型物件(例如指標、文件描述符)的交易內容;
    • 控制使用者空間線程池的大小,並確保將事務指派給線程,以避免在線程池耗盡線程時出現死鎖;
    • 追蹤進程間共享物件的引用計數器,正確傳播進程間引用計數器的變化;
    • 處理多種錯誤場景,並結合 13 種不同的鎖、7 個引用計數器和原子變數。它必須盡可能快速、正確地執行這些任務。
  • 遺留程式碼累積了大量技術債務,使得錯誤檢測和後續開發變得複雜。例如,核心程式碼包含超過一千行的大型函數、有問題的錯誤處理方法以及複雜的結構。
  • Binder 是一個安全關鍵元件。 Android由於運行在隔離沙箱環境中的平台元素(例如 Chrome 渲染進程和軟體編解碼器)可以直接存取 Binder,因此 Binder 中的漏洞允許繞過沙箱。 Binder 的高度複雜性以及技術債使得維護其高安全性變得非常具有挑戰性。

來源: opennet.ru

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster