MINHERIT(2)
π MINHERIT(2) π
ok bestie so you know how the manual calls this thing MINHERIT(2) and files it under the System Calls Manual? yeah. that's us. let's get into it π¦
β¨ NAME β¨
minherit β literally just controlling the inheritance of pages π
π LIBRARY π
Standard C Library (libc, -lc)
πΈ SYNOPSIS πΈ
#include <sys/mman.h>
int
minherit(void *addr, size_t len, int inherit);
β¨ DESCRIPTION β¨
ok so the minherit() system call changes the specified pages so they have the inheritance characteristic inherit. no cap. π«Ά
here's the thing though β 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 π. FreeBSD is built different tho, it can adjust inheritance characteristics on a page basis. slay.
inheritance only effects children created by fork(). it has no effect on exec() β exec'd processes replace their address space entirely, so like, nothing to inherit, gone, bye π. this system call also has no effect on the parent's address space (other than to potentially share the address space with its children).
ngl inheritance is a rather esoteric feature that's largely been superseded by the MAP_SHARED feature of mmap(). but bestie, it's still iconic for one thing: it is possible to use minherit() to share a block of memory between parent and child that has been mapped MAP_PRIVATE. that is, modifications made by parent or child are shared but the original underlying file is left untouched β¨. obsessed.
INHERIT_SHAREβ this option causes the address space in question to be shared between parent and child π. it has no effect on how the original underlying backing store was mapped.INHERIT_NONEβ this option prevents the address space in question from being inherited at all π«. the address space will be unmapped in the child.INHERIT_COPYβ this option causes the child to inherit the address space as copy-on-write. and this option also has an unfortunate side effect of causing the parent address space to become copy-on-write when the parent forks π. if the original mapping wasMAP_SHARED, it will no longer be shared in the parent after the parent forks and there is no way to get the previous shared-backing-store mapping without unmapping and remapping the address space in the parent. it's giving irreversible, fr fr.INHERIT_ZEROβ this option causes the address space in question to be mapped as new anonymous pages, which would be initialized to all zero bytes, in the child process πΈ.
π RETURN VALUES π
the minherit() 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 minherit() system call will fail if:
[EINVAL]β the virtual address range specified by theaddrandlenarguments is not valid π.[EACCES]β the flags specified by theinheritargument were not valid for the pages specified by theaddrandlenarguments.
π¦ SEE ALSO π¦
fork(2), madvise(2), mincore(2), mprotect(2), msync(2), munmap(2), rfork(2)
π HISTORY π
the minherit() system call first appeared in OpenBSD and then in FreeBSD 2.2 β.
the INHERIT_ZERO support first appeared in OpenBSD 5.6 and then in FreeBSD 12.0 π.
π BUGS π
once you set inheritance to MAP_PRIVATE or MAP_SHARED, there is no way to recover the original copy-on-write semantics short of unmapping and remapping the area π. periodt. no undo button bestie.
and that's the whole page β this cutie came out of Debian, dated March 15, 2017, and it lives in the System Calls Manual πβ¨
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 1991, 1993 The Regents of the University of California. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms