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 | |
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')
-rw-r--r-- | sys/vm/vm_map.c | 3 | ||||
-rw-r--r-- | sys/vm/vm_mmap.c | 7 |
2 files changed, 3 insertions, 7 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 982ef3f..8a7eebe 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -590,7 +590,6 @@ vm_map_lookup_entry( vm_map_entry_t cur; vm_map_entry_t last; - GIANT_REQUIRED; /* * Start looking either from the head of the list, or from the hint. */ @@ -2148,8 +2147,6 @@ vm_map_check_protection(vm_map_t map, vm_offset_t start, vm_offset_t end, vm_map_entry_t entry; vm_map_entry_t tmp_entry; - GIANT_REQUIRED; - vm_map_lock_read(map); if (!vm_map_lookup_entry(map, start, &tmp_entry)) { vm_map_unlock_read(map); 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); |