From 227f4f1377adfc8f4a63826da35c5e87456a473e Mon Sep 17 00:00:00 2001 From: alc Date: Sun, 17 Mar 2002 03:19:31 +0000 Subject: 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(). --- sys/vm/vm_map.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'sys/vm/vm_map.c') diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 3e1b4ab..094372a 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -2071,31 +2071,37 @@ vm_map_check_protection(vm_map_t map, vm_offset_t start, vm_offset_t end, GIANT_REQUIRED; + vm_map_lock_read(map); if (!vm_map_lookup_entry(map, start, &tmp_entry)) { + vm_map_unlock_read(map); return (FALSE); } entry = tmp_entry; while (start < end) { if (entry == &map->header) { + vm_map_unlock_read(map); return (FALSE); } /* * No holes allowed! */ if (start < entry->start) { + vm_map_unlock_read(map); return (FALSE); } /* * Check protection associated with entry. */ if ((entry->protection & protection) != protection) { + vm_map_unlock_read(map); return (FALSE); } /* go to next entry */ start = entry->end; entry = entry->next; } + vm_map_unlock_read(map); return (TRUE); } -- cgit v1.1