diff options
author | kib <kib@FreeBSD.org> | 2017-03-13 10:49:36 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2017-03-13 10:49:36 +0000 |
commit | f5b4bf3db9bb31ce466c39af8ee4b81aa991c7a6 (patch) | |
tree | f22c937710331557bb1ff54cb28b207b01a409b2 /sys/kern/imgact_elf.c | |
parent | 2a9d12f2c4505da15f2a424e5ca928af852387d5 (diff) | |
download | FreeBSD-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.c | 18 |
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); |