MIMMUTABLE(2) | System Calls Manual | MIMMUTABLE(2)

# NAME

`mimmutable` — control the immutability of pages

# SYNOPSIS

`#include <sys/mman.h>`

int
`mimmutable`(void *addr, size_t len);

# DESCRIPTION

The `mimmutable`() system call changes currently mapped pages in the region to be marked immutable, which means their protection or mapping may not be changed in the future. Most requests to madvise(2), minherit(2), mmap(2), mprotect(2), msync(2), and munmap(2) to pages marked immutable will return with error `EPERM`.

Unmapped pages in the region do not retain immutability, but this behaviour should not be relied upon.

Not all implementations will guarantee that the immutable characteristic can be set on a page basis; the granularity of changes may be as large as an entire region.

# RETURN VALUES

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

# ERRORS

The `mimmutable`() system call will fail if:

[`EINVAL`]
  The virtual address range specified by the addr and len arguments is not valid.
[`EPERM`]
  At least one page has inheritance of `MAP_INHERIT_ZERO`.

# SEE ALSO

minherit(2), mmap(2), mprotect(2), munmap(2)

# HISTORY

The `mimmutable`() function first appeared in OpenBSD 7.3.

January 21, 2024 | Debian