摘要
在用户空间进行安全监视器调用 (SMC)。
声明
#include <zircon/syscalls.h>
#include <zircon/syscalls/smc.h>
zx_status_t zx_smc_call(zx_handle_t handle,
const zx_smc_parameters_t* parameters,
zx_smc_result_t* out_smc_result);
说明
zx_smc_call()
会从用户空间发出安全监视器调用 (SMC)。它支持使用 zx_smc_parameters_t
输入参数和 zx_smc_result_t
输出参数的 ARM SMC 调用规范。输入 handle 必须是具有足够权限的资源对象才能被执行。
从 zx_smc_call()
的角度来看,大多数参数是不透明的,因为它们依赖于 func_id。func_id 会通知安全监控器要调用服务和函数。client_id 是一个可选字段,专供安全软件跟踪调用客户端操作系统并将其编入索引。secure_os_id 是一个可选字段,适用于 S-EL1 中有多个安全操作系统时使用,以便调用方可以指定预期的安全操作系统。
有关详情,请参阅 ARM SMC 通话惯例文档。
权限
TODO(https://fxbug.dev/42107318)
返回值
如果 handle 具有足够的特权,则 zx_smc_call()
会返回 ZX_OK
。如果成功,系统将通过 out_smc_result
返回 smc 调用的返回值。如果失败,则返回负错误值。
错误
ZX_ERR_BAD_HANDLE
句柄不是有效句柄。
ZX_ERR_WRONG_TYPE
handle 不是资源句柄。
“ZX_ERR_ACCESS_DENIED
”标识名没有足够的权限。
此系统不支持 ZX_ERR_NOT_SUPPORTED
smc_call。
ZX_ERR_INVALID_ARGS
parameters 或 out_smc_result 是 null 指针