zx_vmar_protect
名称
vmar_protect —— 设置虚拟内存页面的保护权限
概要
#include <zircon/syscalls.h>
zx_status_t zx_vmar_protect(zx_handle_t handle, uint32_t options,
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_HANDLE:vmar_handle是无效句柄。
ZX_ERR_WRONG_TYPE:vmar_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_DENIED:vmar_handle对所请求的更改没有适当的权限,用于创建映射的原始VMO句柄没有所请求更改的权限,或者VMAR本身不允许所请求的更改。