summaryrefslogtreecommitdiffstats
path: root/sys/kern/imgact_elf.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-03-13 10:49:36 +0000
committerkib <kib@FreeBSD.org>2017-03-13 10:49:36 +0000
commitf5b4bf3db9bb31ce466c39af8ee4b81aa991c7a6 (patch)
treef22c937710331557bb1ff54cb28b207b01a409b2 /sys/kern/imgact_elf.c
parent2a9d12f2c4505da15f2a424e5ca928af852387d5 (diff)
downloadFreeBSD-src-f5b4bf3db9bb31ce466c39af8ee4b81aa991c7a6.zip
FreeBSD-src-f5b4bf3db9bb31ce466c39af8ee4b81aa991c7a6.tar.gz
Switch from the usage of vm_map_find()/vm_map_insert() to vm_map_fixed().
MFC r314487: Use vm_map_insert() instead of vm_map_find() in elf_map_insert(). MFC r314773: Instead of direct use of vm_map_insert(), call vm_map_fixed(MAP_CHECK_EXCL).
Diffstat (limited to 'sys/kern/imgact_elf.c')
-rw-r--r--sys/kern/imgact_elf.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index 640c52f..32e7f8a 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -397,10 +397,8 @@ __elfN(map_partial)(vm_map_t map, vm_object_t object, vm_ooffset_t offset,
/*
* Create the page if it doesn't exist yet. Ignore errors.
*/
- vm_map_lock(map);
- vm_map_insert(map, NULL, 0, trunc_page(start), round_page(end),
- VM_PROT_ALL, VM_PROT_ALL, 0);
- vm_map_unlock(map);
+ vm_map_fixed(map, NULL, 0, trunc_page(start), round_page(end) -
+ trunc_page(start), VM_PROT_ALL, VM_PROT_ALL, MAP_CHECK_EXCL);
/*
* Find the page from the underlying object.
@@ -451,9 +449,8 @@ __elfN(map_insert)(struct image_params *imgp, vm_map_t map, vm_object_t object,
* The mapping is not page aligned. This means we have
* to copy the data. Sigh.
*/
- rv = vm_map_find(map, NULL, 0, &start, end - start, 0,
- VMFS_NO_SPACE, prot | VM_PROT_WRITE, VM_PROT_ALL,
- 0);
+ rv = vm_map_fixed(map, NULL, 0, start, end - start,
+ prot | VM_PROT_WRITE, VM_PROT_ALL, MAP_CHECK_EXCL);
if (rv != KERN_SUCCESS)
return (rv);
if (object == NULL)
@@ -476,10 +473,9 @@ __elfN(map_insert)(struct image_params *imgp, vm_map_t map, vm_object_t object,
rv = KERN_SUCCESS;
} else {
vm_object_reference(object);
- vm_map_lock(map);
- rv = vm_map_insert(map, object, offset, start, end,
- prot, VM_PROT_ALL, cow);
- vm_map_unlock(map);
+ rv = vm_map_fixed(map, object, offset, start,
+ end - start, prot, VM_PROT_ALL,
+ cow | MAP_CHECK_EXCL);
if (rv != KERN_SUCCESS) {
locked = VOP_ISLOCKED(imgp->vp);
VOP_UNLOCK(imgp->vp, 0);
OpenPOWER on IntegriCloud