diff options
author | Andreas Kling <kling@serenityos.org> | 2020-04-12 20:22:26 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-04-12 20:22:26 +0200 |
commit | c19b56dc990eeb808c01b4cefd735322f0f0329f (patch) | |
tree | b72b443f311d782b3bde3a243e1aa43a7020fce3 /Libraries/LibC | |
parent | dd00175ae2d6f23b08cb803eb86fc0108c393971 (diff) | |
download | serenity-c19b56dc990eeb808c01b4cefd735322f0f0329f.zip |
Kernel+LibC: Add minherit() and MAP_INHERIT_ZERO
This patch adds the minherit() syscall originally invented by OpenBSD.
Only the MAP_INHERIT_ZERO mode is supported for now. If set on an mmap
region, that region will be zeroed out on fork().
Diffstat (limited to 'Libraries/LibC')
-rw-r--r-- | Libraries/LibC/mman.cpp | 6 | ||||
-rw-r--r-- | Libraries/LibC/mman.h | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/Libraries/LibC/mman.cpp b/Libraries/LibC/mman.cpp index d582dc15da..3311c5c53a 100644 --- a/Libraries/LibC/mman.cpp +++ b/Libraries/LibC/mman.cpp @@ -81,4 +81,10 @@ int madvise(void* address, size_t size, int advice) int rc = syscall(SC_madvise, address, size, advice); __RETURN_WITH_ERRNO(rc, rc, -1); } + +int minherit(void* address, size_t size, int inherit) +{ + int rc = syscall(SC_minherit, address, size, inherit); + __RETURN_WITH_ERRNO(rc, rc, -1); +} } diff --git a/Libraries/LibC/mman.h b/Libraries/LibC/mman.h index 0f56dfb5fc..38c3069278 100644 --- a/Libraries/LibC/mman.h +++ b/Libraries/LibC/mman.h @@ -49,6 +49,8 @@ #define MADV_SET_NONVOLATILE 0x200 #define MADV_GET_VOLATILE 0x400 +#define MAP_INHERIT_ZERO 1 + __BEGIN_DECLS void* mmap(void* addr, size_t, int prot, int flags, int fd, off_t); @@ -58,5 +60,6 @@ int munmap(void*, size_t); int mprotect(void*, size_t, int prot); int set_mmap_name(void*, size_t, const char*); int madvise(void*, size_t, int advice); +int minherit(void*, size_t, int inherit); __END_DECLS |