RFC-0273:處理特定資訊通話

RFC-0273:處理特定資訊通話
狀態已接受
區域
  • Zircon
說明

在 object_get_info 呼叫中提供控制代碼主題的替代項目。

Gerrit 變更
作者
審查人員
提交日期 (年-月-日)2025-05-19
審查日期 (年-月-日)2025-07-08

問題陳述

提供查詢控制代碼相關資訊的機制,與查詢控制代碼所指物件的資訊明顯不同。

摘要

導入一對呼叫,支援 object_get_infoZX_INFO_HANDLE_VALIDZX_INFO_HANDLE_BASIC 主題。

利害關係人

Zircon 核心團隊。

協助人員:

cpu@google.com

審查者:

  • abarth@google.com
  • maniscalco@google.com
  • mcgrathr@google.com

已諮詢:

Zircon 核心團隊。

公共平台:

在 Zircon 內部聊天室中討論。

需求條件

現有程式碼中有大量呼叫 object_get_info 的情況,且 ZX_INFO_HANDLE_BASIC 主題會查詢 KOID,以利診斷。我們需要謹慎支援這項程式碼。

設計

推出一對以 handle_ 為中心的新呼叫,取代 object_get_info 中的控制代碼主題。這些呼叫的行為與取代的 object_get_info 查詢相同,但採用現代化的 API 設計。

處理有效性測試

handle_check_valid 接受單一 zx_handle_t 參數,如果控制代碼有效,則傳回 ZX_OK,否則傳回錯誤。這是用來取代以 ZX_INFO_HANDLE_VALID 主題呼叫 object_get_info 的做法。確切的錯誤情況和代碼會在 API 審查期間決定,目標如下: - 為靜態無效的位元模式 (例如 ZX_HANDLE_INVALID) 產生專屬錯誤,並清除兩個最低有效位元之一。 - 避免使用 ZX_ERR_BAD_HANDLE,將此代碼保留給會觸發無效控制代碼政策的情況。

處理基本資訊

handle_get_basic_info 會填入 zx_handle_basic_info_t 結構,其中包含控制碼的相關資訊。這是用來取代呼叫 object_get_info,並使用 ZX_INFO_HANDLE_BASIC 主題。

object_get_info

這項提案不包括修改現有的 object_get_info 呼叫。 並繼續支援帳號代碼專屬主題。我們可能會想鼓勵新程式碼使用特定控制代碼的進入點,以利教化。

實作

這些呼叫最初可使用現有的 object_get_info 系統呼叫,以 vdsocalls 形式實作。

成效

這會為 vDSO 新增一個進入點,需要在程式載入時重新定位。預計影響不大。

Ergonomics

這有助於進一步釐清 Zircon API 中「控制代碼」和「物件」概念的分離。

回溯相容性

這個 API 會按照 RFC-0239 中定義的程序新增。目前 object_get_info 的現有功能不會變更。日後,我們可能會淘汰並最終移除 object_get_info 中處理特定主題的支援功能,但會預留足夠時間,讓所有呼叫端和程式庫更新使用這項功能的新呼叫。

之後的作業

所有現有程式碼更新完畢,改用處理相關主題的新呼叫後,我們就能更新 object_get_info,針對這些主題傳回錯誤。

安全性考量

預期不會有安全性考量。

隱私權注意事項

預期不會有安全性考量。

測試

Zircon 核心測試將擴大涵蓋這些新進入點,就像目前涵蓋 object_get_info 一樣。

說明文件

系統會為新進入點新增系統呼叫說明文件,並更新「Zircon 控制代碼」文件,以引用這些進入點。

缺點、替代方案和未知事項

您也可以選擇不採取任何行動,繼續使用物件進入點查詢控制代碼資訊。

既有技術和參考資料

syscall API 的其餘部分會區分控制代碼和物件上的作業名稱。舉例來說,handle_closehandle_duplicate 會對控制代碼執行作業,而 object_get_propertyobject_signal 則會對物件執行作業。