diff options
author | alc <alc@FreeBSD.org> | 2002-03-17 03:19:31 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-03-17 03:19:31 +0000 |
commit | 227f4f1377adfc8f4a63826da35c5e87456a473e (patch) | |
tree | 3fd13b03ff318882c0192220ac50fc5876b14702 /sys/vm/vm_glue.c | |
parent | 0fa4622b6586ab2df8824be20c60990998953acd (diff) | |
download | FreeBSD-src-227f4f1377adfc8f4a63826da35c5e87456a473e.zip FreeBSD-src-227f4f1377adfc8f4a63826da35c5e87456a473e.tar.gz |
Acquire a read lock on the map inside of vm_map_check_protection() rather
than expecting the caller to do so. This (1) eliminates duplicated code in
kernacc() and useracc() and (2) fixes missing synchronization in munmap().
Diffstat (limited to 'sys/vm/vm_glue.c')
-rw-r--r-- | sys/vm/vm_glue.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c index 678da3b..3263180 100644 --- a/sys/vm/vm_glue.c +++ b/sys/vm/vm_glue.c @@ -128,9 +128,7 @@ kernacc(addr, len, rw) prot = rw; saddr = trunc_page((vm_offset_t)addr); eaddr = round_page((vm_offset_t)addr + len); - vm_map_lock_read(kernel_map); rv = vm_map_check_protection(kernel_map, saddr, eaddr, prot); - vm_map_unlock_read(kernel_map); return (rv == TRUE); } @@ -163,7 +161,7 @@ useracc(addr, len, rw) return (FALSE); } map = &curproc->p_vmspace->vm_map; - vm_map_lock_read(map); + /* * We save the map hint, and restore it. Useracc appears to distort * the map hint unnecessarily. @@ -172,7 +170,6 @@ useracc(addr, len, rw) rv = vm_map_check_protection(map, trunc_page((vm_offset_t)addr), round_page((vm_offset_t)addr + len), prot); map->hint = save_hint; - vm_map_unlock_read(map); return (rv == TRUE); } |