MINHERIT(2) | System Calls Manual | MINHERIT(2)

# NAME

`minherit` — control the inheritance of pages

# SYNOPSIS

`#include <sys/mman.h>`

int
`minherit`(void *addr, size_t len, int inherit);

# DESCRIPTION

The `minherit`() system call changes the specified pages to have the inheritance characteristic inherit. A page's inheritance characteristic controls how it will be mapped in child processes as created by fork(2).

The possible inheritance characteristics are:

`MAP_INHERIT_NONE`
  Pages are not mapped in the child process.
`MAP_INHERIT_COPY`
  Private copy of pages are mapped in the child process.
`MAP_INHERIT_SHARE`
  Mapped pages are shared between the parent and child processes.
`MAP_INHERIT_ZERO`
  New anonymous pages (initialized to all zero bytes) are mapped in the child process.

Not all implementations will guarantee that the inheritance 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 `minherit`() system call will fail if:

[`EPERM`]
  The addr and len parameters specify a region that contains at least one page which is immutable, or `MAP_INHERIT_ZERO` is being requested on a page without `PROT_WRITE` permission.
[`EINVAL`]
  The virtual address range specified by the addr and len arguments is not valid.
[`EINVAL`]
  The inherit argument is invalid.

# SEE ALSO

madvise(2), mimmutable(2), mprotect(2), msync(2), munmap(2)

# HISTORY

The `minherit`() function first appeared in OpenBSD 2.0.

January 21, 2024 | Debian