zx_vmar_protect


英文原文快照


名称

vmar_protect —— 设置虚拟内存页面的保护权限

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_vmar_protect(zx_handle_t handle, uint32_t options,
  3. zx_vaddr_t addr, uint64_t len);

描述

vmar_protect() 的功能是更改从addr开始len个字节范围内的内存映射的访问保护权限。 options参数是包含以下选项中的一个或多个的位或值:

  • ZX_VM_PERM_READ:映射区域为可读的。 如果vmar没有ZX_VM_CAN_MAP_READ权限,或vmar句柄没有ZX_RIGHT_READ权限,则会导致错误。
    如果用于创建映射的VMO句柄没有ZX_RIGHT_READ,则也会导致错误。
  • ZX_VM_PERM_WRITE:映射区域为可写的。 如果vmar没有ZX_VM_CAN_MAP_WRITE权限,或vmar句柄没有ZX_RIGHT_WRITE权限,则会导致错误。
    如果用于创建映射的VMO句柄没有ZX_RIGHT_WRITE,则也会导致错误。
  • ZX_VM_PERM_EXECUTE:映射区域为可执行。 如果vmar没有ZX_VM_CAN_MAP_EXECUTE权限,或vmar句柄没有ZX_RIGHT_EXECUTE权限,则会导致错误。 如果用于创建映射的VMO句柄没有ZX_RIGHT_EXECUTE权限,则也会导致错误。

len必须是页面对齐的。

权限

TODO(ZX-2399)

返回值

vmar_protect() 调用成功则返回ZX_OK

错误码

ZX_ERR_BAD_HANDLEvmar_handle是无效句柄。

ZX_ERR_WRONG_TYPEvmar_handle不是VMAR类型的句柄。

ZX_ERR_INVALID_ARGS:下列情况之一,prot_flags是一个不受支持的标志组合(例如,设置了ZX_VM_PERM_WRITE选项但未设置ZX_VM_PERM_READ);addr不是页面对齐;len是0;或者是请求的范围的某个子范围被子区域所占用。 ZX_ERR_NOT_FOUND:请求范围的某些子范围尚未映射。

ZX_ERR_ACCESS_DENIEDvmar_handle对所请求的更改没有适当的权限,用于创建映射的原始VMO句柄没有所请求更改的权限,或者VMAR本身不允许所请求的更改。

注释

另见

vmar_allocate, vmar_destroy, vmar_map, vmar_unmap.