---
name: "mprotect"
section: "2freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mprotect/2freebsd"
---

# mprotect(2freebsd)

control the protection of pages

## NAME

**mprotect** – control the protection of pages

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/mman.h\>**

*int*\

**mprotect**(*void \*addr*, *size\_t len*, *int prot*);

## DESCRIPTION

The **mprotect**() system call changes the specified pages to have protection *prot*. Not all implementations will guarantee protection on a page basis; the granularity of protection changes may be as large as an entire region. A region is the virtual address space defined by the start and end addresses of a *struct vm\_map\_entry*.

Currently these protection bits are known, which can be combined, OR'd together:

- PROT\_NONE

  No permissions at all.

- PROT\_READ

  The pages can be read.

- PROT\_WRITE

  The pages can be written.

- PROT\_EXEC

  The pages can be executed.

## RETURN VALUES

The **mprotect()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **mprotect**() system call will fail if:

- \[EACCES\]

  The calling process was not allowed to change the protection to the value specified by the *prot* argument.

- \[EINVAL\]

  The virtual address range specified by the *addr* and *len* arguments is not valid.

## SEE ALSO

[madvise(2)](/madvise/2.md), [mincore(2)](/mincore/2.md), [msync(2)](/msync/2.md), [munmap(2)](/munmap/2.md)

## HISTORY

The **mprotect**() system call first appeared in 4.4BSD.
