diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_exec.c | 2 | ||||
-rw-r--r-- | sys/kern/subr_uio.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index bb92972..0ec9817 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -949,9 +949,11 @@ exec_map_first_page(imgp) ma[0] = vm_page_lookup(object, 0); if ((rv != VM_PAGER_OK) || (ma[0] == NULL)) { if (ma[0]) { + vm_page_lock(ma[0]); vm_page_lock_queues(); vm_page_free(ma[0]); vm_page_unlock_queues(); + vm_page_unlock(ma[0]); } VM_OBJECT_UNLOCK(object); return (EIO); diff --git a/sys/kern/subr_uio.c b/sys/kern/subr_uio.c index 725b1a8..783a8d6 100644 --- a/sys/kern/subr_uio.c +++ b/sys/kern/subr_uio.c @@ -104,9 +104,11 @@ retry: if ((user_pg = vm_page_lookup(uobject, upindex)) != NULL) { if (vm_page_sleep_if_busy(user_pg, TRUE, "vm_pgmoveco")) goto retry; + vm_page_lock(user_pg); vm_page_lock_queues(); pmap_remove_all(user_pg); vm_page_free(user_pg); + vm_page_unlock(user_pg); } else { /* * Even if a physical page does not exist in the |