RFC-0273:處理特定資訊通話 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 在 object_get_info 呼叫中提供控制代碼主題的替代項目。 |
Gerrit 變更 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2025-05-19 |
審查日期 (年-月-日) | 2025-07-08 |
問題陳述
提供查詢控制代碼相關資訊的機制,與查詢控制代碼所指物件的資訊明顯不同。
摘要
導入一對呼叫,支援 object_get_info
的 ZX_INFO_HANDLE_VALID
和 ZX_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_close
和 handle_duplicate
會對控制代碼執行作業,而 object_get_property
和 object_signal
則會對物件執行作業。