mprotect - set protection of memory mapping
int mprotect(void *addr, size_t len, int prot);
The mprotect() function changes the access protections on
the mappings specified by the range [addr, addr + len),
rounding len up to the next multiple of the page size as
returned by sysconf(3C), to be that specified by prot. Legi-
timate values for prot are the same as those permitted for
mmap(2) and are defined in <sys/mman.h> as:
/* page can be read */
/* page can be written */
/* page can be executed */
/* page can not be accessed */
When mprotect() fails for reasons other than EINVAL, the
protections on some of the pages in the range [addr, addr +
len) may have been changed. If the error occurs on some page
at addr2, then the protections of all whole pages in the
range [addr, addr2] will have been modified.
Upon successful completion, mprotect() returns 0. Otherwise,
it returns -1 and sets errno to indicate the error.
The mprotect() function will fail if:
The prot argument specifies a protection that violates
the access permission the process has to the underly-
ing memory object.
The len argument has a value equal to 0, or addr is
not a multiple of the page size as returned by
Addresses in the range [addr, addr + len) are invalid
for the address space of a process, or specify one or
more pages which are not mapped.
The mprotect() function may fail if:
The address range [addr, addr + len) includes one or
more pages that have been locked in memory and that
were mapped MAP_PRIVATE; prot includes PROT_WRITE; and
the system has insufficient resources to reserve
memory for the private pages that may be created.
These private pages may be created by store operations
in the now-writable address range.
mmap(2), plock(3C), mlock(3C), mlockall(3C), sysconf(3C)
Man(1) output converted with