Set protection of virtual memory pages.
#include <zircon/syscalls.h> zx_status_t zx_vmar_protect(zx_handle_t handle, zx_vm_option_t options, zx_vaddr_t addr, size_t len);
zx_vmar_protect()
alters the access protections for the memory mappings in the range of len bytes starting from addr. The options argument should be a bitwise-or of one or more of the following:
len must be page-aligned.
If options & ZX_VM_PERM_READ, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_READ.
If options & ZX_VM_PERM_WRITE, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_WRITE.
If options & ZX_VM_PERM_EXECUTE, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_EXECUTE.
zx_vmar_protect()
returns ZX_OK on success.
ZX_ERR_BAD_HANDLE handle is not a valid handle.
ZX_ERR_WRONG_TYPE handle is not a VMAR handle.
ZX_ERR_INVALID_ARGS prot_flags is an unsupported combination of flags (e.g., ZX_VM_PERM_WRITE but not ZX_VM_PERM_READ), addr is not page-aligned, len is 0, or some subrange of the requested range is occupied by a subregion.
ZX_ERR_NOT_FOUND Some subrange of the requested range is not mapped.
ZX_ERR_ACCESS_DENIED handle does not have the proper rights for the requested change, the original VMO handle used to create the mapping did not have the rights for the requested change, or the VMAR itself does not allow the requested change.