| # zx_vmar_protect | |
| ## NAME | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| Set protection of virtual memory pages. | |
| ## SYNOPSIS | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| ```c | |
| #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); | |
| ``` | |
| ## DESCRIPTION | |
| `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: | |
| - **ZX_VM_PERM_READ** Map as readable. It is an error if *handle* | |
| does not have **ZX_VM_CAN_MAP_READ** permissions or *handle* does | |
| not have the **ZX_RIGHT_READ** right. It is also an error if the VMO handle | |
| used to create the mapping did not have the **ZX_RIGHT_READ** right. | |
| - **ZX_VM_PERM_WRITE** Map as writable. It is an error if *handle* | |
| does not have **ZX_VM_CAN_MAP_WRITE** permissions or *handle* does | |
| not have the **ZX_RIGHT_WRITE** right. It is also an error if the VMO handle | |
| used to create the mapping did not have the **ZX_RIGHT_WRITE** right. | |
| - **ZX_VM_PERM_EXECUTE** Map as executable. It is an error if *handle* | |
| does not have **ZX_VM_CAN_MAP_EXECUTE** permissions or *handle* does | |
| not have the **ZX_RIGHT_EXECUTE** right. It is also an error if the VMO handle | |
| used to create the mapping did not have the **ZX_RIGHT_EXECUTE** right. | |
| *len* must be page-aligned. | |
| ## RIGHTS | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| 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**. | |
| ## RETURN VALUE | |
| `zx_vmar_protect()` returns **ZX_OK** on success. | |
| ## ERRORS | |
| **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. | |
| ## NOTES | |
| ## SEE ALSO | |
| - [`zx_vmar_allocate()`] | |
| - [`zx_vmar_destroy()`] | |
| - [`zx_vmar_map()`] | |
| - [`zx_vmar_unmap()`] | |
| <!-- References updated by update-docs-from-fidl, do not edit. --> | |
| [`zx_vmar_allocate()`]: vmar_allocate.md | |
| [`zx_vmar_destroy()`]: vmar_destroy.md | |
| [`zx_vmar_map()`]: vmar_map.md | |
| [`zx_vmar_unmap()`]: vmar_unmap.md |