MPROTECT
Section: Linux Programmer's Manual (2)
Updated: 1995-06-23
Index
Return to Main Contents
NAME
mprotect - control allowable accesses to a region of memory
SYNOPSIS
#include <sys/mman.h>
int mprotect(caddr_t addr, size_t *len, int prot);
DESCRIPTION
mprotect
controls how a section of memory may be accessed. If an access is
disallowed by the protection given it, the program receives a
SIGSEGV.
prot
is a bitwise-or of the following values:
- PROT_NONE
-
The memory cannot be accessed at all.
- PROT_READ
-
The memory can be read.
- PROT_WRITE
-
The memory can be written to.
- PROT_EXEC
-
The memory can contain executing code.
The new protection replaces any existing protection. For example, if the
memory had previously been marked PROT_READ, and mprotect
is then called with prot PROT_WRITE, it will no longer
be readable.
RETURN VALUE
On success,
mprotect
returns zero. On error, -1 is returned, and
errno
is set appropriately.
ERRORS
- EINVAL
-
addr is not a valid pointer.
- EFAULT
-
The memory cannot be accessed.
- EACCES
-
The memory cannot be given the specified access. This can happen,
for example, if you
mmap(2)
a file to which you have read-only access, then ask
mprotect
to mark it
PROT_WRITE.
- ENOMEM
-
Internal kernel structures could not be allocated.
EXAMPLE
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>
int
main(void)
{
char *p;
char c;
/* Allocate a buffer; it will have the default
protection of PROT_READ|PROT_WRITE. */
p = malloc(1024);
if (!p) {
perror("Couldn't malloc(1024)");
exit(errno);
}
c = p[666]; /* Read; ok */
p[666] = 42; /* Write; ok */
/* Mark the buffer read-only. */
if (mprotect(p, 1024, PROT_READ)) {
perror("Couldn't mprotect");
exit(errno);
}
c = p[666]; /* Read; ok */
p[666] = 42; /* Write; program dies on SIGSEGV */
exit(0);
}
SEE ALSO
mmap(2)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- EXAMPLE
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 12:24:43 GMT, March 22, 2025