RFC-0251:無根存取

RFC-0251:沒有根存取權
狀態已接受
領域
  • 驅動因素
說明

存取經過微調的資源取代根資源

毛皮變化
作者
審查人員
提交日期 (年-月-日)2023-11-20
審查日期 (年-月-日)2024-06-05

摘要

這份 RFC 詳細說明瞭如何建立經過微調的資源,而非建立精細資源的方式和原因 存取根資源最終目標是完全消除根深 資源。由於使用範圍廣泛,因此我們需要 有效維護資源,不會打破資料 目前依附於此

提振精神

根資源是一項強大的能力 並公開內部具有高度特權存取權的大範圍 以及系統根資源允許存取組成資源。 以往很難將根資源分割成 只有核心、主機板驅動程式庫或特定裝置驅動程式 具備知識,能為較專業的資源指定有效的範圍。 雖然是相當短暫的,但這種透過 各元件之間需要 component-manager,以便存取專屬資源 不會遵循最低權限原則。我們應該只將 並完全移除根資源

相關人員

講師:leannogasawara@google.com

審查者:

需求條件

根資源正用於需要經過更精細調整的資源 相反地大部分的通話網站都已更新。 專屬資源針對目前不支援這項功能的地方 必須是定義、轉送及公開的新資源,系統才能正常運作 請記住最低權限原則

設計

component-manager 可以託管每項資源的服務並轉送每項資源 也就是個別種類的許多資源都已實作這項機制,但正式 都應該能夠處理所有資源種類,而不是使用 存取專用資源的根資源

實作

在仍在使用根資源的位置時,應找出 並建立更精細的資源 權限較少新資源會轉送至 而非轉送根資源這裡列出了 應該存在:

  • CPU 資源:取得及設定 CPU 效能參數
  • 偵錯資源:用於存取各種核心偵錯 syscalls
  • 能源資訊資源:存取能源消耗資訊
  • 偵錯記錄資源:啟用讀取和寫入偵錯記錄
  • framebuffer 資源:取得和設定系統啟動載入程式 framebuffer
  • 管理程序資源:建立可在 管理程序
  • 資訊資源:用於核心統計資料
  • iommu 資源:iommu Manager 使用的資源
  • ioport 資源:x86 ioport 的存取門
  • irq 資源:限制干擾物件的存取權
  • 用於啟動系統的 Mexec 資源
  • mmio resource:mmio 出入口
  • MSI 資源:用來在 PCI 上分配 MSI 範圍
  • 耗電量:控管 CPU 效能
  • 設定檔資源:用來建立排程器設定檔
  • smc 資源:平台裝置通訊協定會使用這個資源來存取 SMC 範圍
  • vmex 資源:將 VMO 標示為執行檔

這些新資源會取代目前依附於根的系統呼叫 確保每次呼叫都能取得運作所需的最低權限 而非偏誤。

針對每個識別的新資源:

  • 如果資源對應到範圍資源,則該資源應有專屬的 定義種類,也沒有基底包括 ioport、irq、mmio 和 smc 再複習一下,機構節點 是所有 Google Cloud Platform 資源的根節點
  • 所有其他資源則會是系統資源 新定義的基礎類型
  • 將更新現有核心系統呼叫,以接受並驗證更精細的 除了根資源外,也能選擇精細的資源
  • 元件管理員需要推出新服務來提供帳號代碼 並介紹新資源
  • 呼叫站台和對應的 Cml 檔案會更新以使用更精細 再複習一下,機構節點 是所有 Google Cloud Platform 資源的根節點

如果所有需要存取根資源的呼叫已替換為 fuchsia.boot.RootResource 服務則可 已從「driver-manager」和「component-manager」中移除。皮膚暴露在風險中可能會 ,因此程式設計師日後必須接受安全性審查 嘗試在資源恢復正常前先行使用

在這個階段,根資源只會由核心建立並傳遞 設為使用者空間您可以變更核心 即可停止建立資源並更新系統呼叫 精細的資源根資源已不存在。

「Component_manager」中代管的新服務應如下所示:


@discoverable
closed protocol IommuResource {
    strict Get() - >(resource struct {
        resource zx.Handle:RESOURCE; }
    );
};

成效

預期不會有任何變化。

安全性考量

此 RFC 透過降低 完全無法存取 核心。根資源剛公開,因為有足夠時間 例如使用者空間不應無法存取根資源 它具備直接實作,說明如何使用更精細的資源。 下游還有更多需要維護的資源,但元件應該 瞭解他們需要的特定資源,而不是使用 強大的根資源

隱私權注意事項

此 RFC 不會影響隱私。

測試

現有的成員資源已對 component-manager。新資源可複製這個範例,確保 正常運作,移除 fuchsia.boot.RootResource 通訊協定的路徑時 從 cml 載入,如果仍有對根資源的呼叫,CICQ 就會損毀。A 罩杯 通過 CICQ 應足以測試新資源是否正常運作, 表示不再需要根資源

說明文件

建立新資源時,resource documentation 必須 。許多測試都會參照直接呼叫的假資源 root_resource。您也應該更新變數名稱,以參照更多 以及適用的特定資源

缺點、替代方案和未知

替代做法:不執行任何動作

這個 RFC 的另一個替代方案是讓睡中的狗散步。系統運作方式 減少需要維護的資源然而,現狀違反了 保證程式只能存取所需的資源。 使用者空間中沒有任何項目需要存取根資源。根資源是 能力更為強大進一步微調 資源轉送功能可讓貢獻者輕鬆確保 元件只提供最低限度的權限 這通常代表交易 不會十分要求關聯語意

另一個替代方案是使用根工作。所有其他工作都是衍生自 這就如同根資源可建立所有其他資源的方式一樣。 可將根資源替換為根工作,但也不能解決 也能降低存取機率 資源存取權

未來工作

即日起,元件或 以及核心測試並非透過政策提供 檔案。核心仍在建立執行個體,且資源檢查作業也會驗證相同的設定。 移除驗證是釋放根資源的最後一個步驟。