diff options
author | alc <alc@FreeBSD.org> | 2002-05-04 02:07:36 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-05-04 02:07:36 +0000 |
commit | d44b3a12b358680e53f64b25052911a5ea76bcbc (patch) | |
tree | b598d00ef2346fd48055b9b30c73a01d740eb7ac /sys/vm/vm_mmap.c | |
parent | 48ff9098aa9307bb2e8449b4f419c02a51884942 (diff) | |
download | FreeBSD-src-d44b3a12b358680e53f64b25052911a5ea76bcbc.zip FreeBSD-src-d44b3a12b358680e53f64b25052911a5ea76bcbc.tar.gz |
o Remove GIANT_REQUIRED from vm_map_lookup_entry() and
vm_map_check_protection().
o Call vm_map_check_protection() without Giant held in munmap().
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r-- | sys/vm/vm_mmap.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 8b8b4f8..5b0edc8 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -607,16 +607,15 @@ munmap(td, uap) if (VM_MIN_ADDRESS > 0 && addr < VM_MIN_ADDRESS) return (EINVAL); #endif - mtx_lock(&Giant); map = &td->td_proc->p_vmspace->vm_map; /* * Make sure entire range is allocated. */ - if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) { - mtx_unlock(&Giant); + if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) return (EINVAL); - } + /* returns nothing but KERN_SUCCESS anyway */ + mtx_lock(&Giant); (void) vm_map_remove(map, addr, addr + size); mtx_unlock(&Giant); return (0); |