diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2014-06-19 05:00:39 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2014-06-19 05:00:39 +0000 |
commit | 11c42bcc5406b33b6d4dbb81a097bf9ab8860f60 (patch) | |
tree | b847ae6506c709809c1cbb861579f0167b5fcee8 /sys/vm/vm_mmap.c | |
parent | 8efb41982974cce520d3ad1f19a1f7460abd46f6 (diff) | |
download | src-11c42bcc5406b33b6d4dbb81a097bf9ab8860f60.tar.gz src-11c42bcc5406b33b6d4dbb81a097bf9ab8860f60.zip |
Add MAP_EXCL flag for mmap(2). It should be combined with MAP_FIXED,
and prevents the request from deleting existing mappings in the
region, failing instead.
Reviewed by: alc
Discussed with: jhb
Tested by: markj, pho (previous version, as part of the bigger patch)
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=267630
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r-- | sys/vm/vm_mmap.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 0fc5bb409a9a..a5248399ab9a 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -245,6 +245,8 @@ sys_mmap(td, uap) flags |= MAP_ANON; pos = 0; } + if ((flags & (MAP_EXCL | MAP_FIXED)) == MAP_EXCL) + return (EINVAL); /* * Align the file position to a page boundary, @@ -1626,6 +1628,8 @@ vm_mmap(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot, return (EINVAL); docow |= MAP_STACK_GROWS_DOWN; } + if ((flags & MAP_EXCL) != 0) + docow |= MAP_CHECK_EXCL; if (fitit) { if ((flags & MAP_ALIGNMENT_MASK) == MAP_ALIGNED_SUPER) |