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 内部聊天室中讨论过。

要求

大量现有代码使用 ZX_INFO_HANDLE_BASIC 主题调用 object_get_info 来查询 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 结构。此方法可替代调用主题为 ZX_INFO_HANDLE_BASICobject_get_info

object_get_info

此提案不包括修改现有的 object_get_info 调用。 它将继续支持特定于账号的主题。我们可能希望鼓励新代码使用特定于句柄的入口点进行启发。

实现

这些调用最初可以使用现有的 object_get_info 系统调用实现为 vdsocall。

性能

这会向 vDSO 添加一个需要在程序加载时进行重定位的入口点。预计这种影响微乎其微。

工效学设计

这有助于进一步明确 Zircon API 中“句柄”和“对象”概念的分离。

向后兼容性

此 API 将按照 RFC-0239 中定义的程序添加。目前,object_get_info 的现有功能不会发生变化。未来,在有足够的时间让所有使用此功能的调用方和库更新为使用这些新调用后,我们可能会弃用并最终移除对 object_get_info 中特定主题的句柄的支持。

未来的工作

一旦所有现有代码都已更新为使用与句柄相关的主题的新调用,我们就可以更新 object_get_info,以便针对这些主题返回错误。

安全注意事项

预计不会有任何安全注意事项。

隐私注意事项

预计不会有任何安全注意事项。

测试

Zircon 核心测试将扩展到涵盖这些新入口点,就像它们今天涵盖 object_get_info 一样。

文档

将为新的入口点添加新的系统调用文档,并更新“Zircon 句柄”文档以引用这些入口点。

缺点、替代方案和未知因素

另一种方法是不执行任何操作,继续使用对象入口点查询句柄信息。

在先技术和参考资料

其余的系统调用 API 通过名称区分对句柄和对象的操作。例如,handle_closehandle_duplicate 对句柄进行操作,而 object_get_propertyobject_signal 对对象进行操作。