1.\" 2.\" Copyright (c) 1991, 1993 3.\" The Regents of the University of California. All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in the 12.\" documentation and/or other materials provided with the distribution. 13.\" 3. Neither the name of the University nor the names of its contributors 14.\" may be used to endorse or promote products derived from this software 15.\" without specific prior written permission. 16.\" 17.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27.\" SUCH DAMAGE. 28.\" 29.\" @(#)minherit.2 8.1 (Berkeley) 6/9/93 30.\" 31.Dd March 15, 2017 32.Dt MINHERIT 2 33.Os 34.Sh NAME 35.Nm minherit 36.Nd control the inheritance of pages 37.Sh LIBRARY 38.Lb libc 39.Sh SYNOPSIS 40.In sys/mman.h 41.Ft int 42.Fn minherit "void *addr" "size_t len" "int inherit" 43.Sh DESCRIPTION 44The 45.Fn minherit 46system call 47changes the specified pages to have the inheritance characteristic 48.Fa inherit . 49Not all implementations will guarantee that the inheritance characteristic 50can be set on a page basis; 51the granularity of changes may be as large as an entire region. 52.Fx 53is capable of adjusting inheritance characteristics on a page basis. 54Inheritance only effects children created by 55.Fn fork . 56It has no effect on 57.Fn exec . 58exec'd processes replace their address space entirely. 59This system call also 60has no effect on the parent's address space (other than to potentially 61share the address space with its children). 62.Pp 63Inheritance is a rather esoteric feature largely superseded by the 64.Dv MAP_SHARED 65feature of 66.Fn mmap . 67However, it is possible to use 68.Fn minherit 69to share a block of memory between parent and child that has been mapped 70.Dv MAP_PRIVATE . 71That is, modifications made by parent or child are shared but 72the original underlying file is left untouched. 73.Bl -tag -width ".Dv INHERIT_SHARE" 74.It Dv INHERIT_SHARE 75This option causes the address space in question to be shared between 76parent and child. 77It has no effect on how the original underlying backing 78store was mapped. 79.It Dv INHERIT_NONE 80This option prevents the address space in question from being inherited 81at all. 82The address space will be unmapped in the child. 83.It Dv INHERIT_COPY 84This option causes the child to inherit the address space as copy-on-write. 85This option also has an unfortunate side effect of causing the parent 86address space to become copy-on-write when the parent forks. 87If the original mapping was 88.Dv MAP_SHARED , 89it will no longer be shared in the parent 90after the parent forks and there is no way to get the previous 91shared-backing-store mapping without unmapping and remapping the address 92space in the parent. 93.It Dv INHERIT_ZERO 94This option causes the address space in question to be mapped as new 95anonymous pages, 96which would be initialized to all zero bytes, 97in the child process. 98.El 99.Sh RETURN VALUES 100.Rv -std minherit 101.Sh ERRORS 102The 103.Fn minherit 104system call will fail if: 105.Bl -tag -width Er 106.It Bq Er EINVAL 107The virtual address range specified by the 108.Fa addr 109and 110.Fa len 111arguments is not valid. 112.It Bq Er EACCES 113The flags specified by the 114.Fa inherit 115argument were not valid for the pages specified 116by the 117.Fa addr 118and 119.Fa len 120arguments. 121.El 122.Sh SEE ALSO 123.Xr fork 2 , 124.Xr madvise 2 , 125.Xr mincore 2 , 126.Xr mprotect 2 , 127.Xr msync 2 , 128.Xr munmap 2 , 129.Xr rfork 2 130.Sh HISTORY 131The 132.Fn minherit 133system call first appeared in 134.Ox 135and then in 136.Fx 2.2 . 137.Pp 138The 139.Dv INHERIT_ZERO 140support first appeared in 141.Ox 5.6 142and then in 143.Fx 12.0 . 144.Sh BUGS 145Once you set inheritance to 146.Dv MAP_PRIVATE 147or 148.Dv MAP_SHARED , 149there is no way to recover the original copy-on-write semantics 150short of unmapping and remapping the area. 151