summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2003-04-18 23:47:59 +0000
committerdrahn <drahn@openbsd.org>2003-04-18 23:47:59 +0000
commitbdbe75d0e9c821e8cb2d91f95ce3f4ff2bc94a94 (patch)
treeb53003a327aeee85635bf98c5e979585a80aedf6
parentsupport for making directories executable if readable. (diff)
downloadwireguard-openbsd-bdbe75d0e9c821e8cb2d91f95ce3f4ff2bc94a94.tar.xz
wireguard-openbsd-bdbe75d0e9c821e8cb2d91f95ce3f4ff2bc94a94.zip
Return EINVAL if MAP_FIXED was specified but was not available. ok tedu@
-rw-r--r--sys/uvm/uvm_mmap.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/uvm/uvm_mmap.c b/sys/uvm/uvm_mmap.c
index 680f8d5ff87..c8ed69d8bbe 100644
--- a/sys/uvm/uvm_mmap.c
+++ b/sys/uvm/uvm_mmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_mmap.c,v 1.41 2003/04/17 03:50:54 drahn Exp $ */
+/* $OpenBSD: uvm_mmap.c,v 1.42 2003/04/18 23:47:59 drahn Exp $ */
/* $NetBSD: uvm_mmap.c,v 1.49 2001/02/18 21:19:08 chs Exp $ */
/*
@@ -168,12 +168,20 @@ sys_mquery(struct proc *p, void *v, register_t *retval)
/* prevent a user requested address from falling in heap space */
if ((vaddr + SCARG(uap, size) > (vaddr_t)p->p_vmspace->vm_daddr) &&
- (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ))
+ (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ)) {
+ if (flags & UVM_FLAG_FIXED) {
+ error = EINVAL;
+ goto done;
+ }
vaddr = round_page((vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ);
+ }
if (uvm_map_findspace(&p->p_vmspace->vm_map, vaddr, SCARG(uap, size),
&vaddr, uobj, uoff, 0, flags) == NULL) {
- error = ENOMEM;
+ if (flags & UVM_FLAG_FIXED)
+ error = EINVAL;
+ else
+ error = ENOMEM;
} else {
/*
* XXX?
@@ -185,7 +193,7 @@ sys_mquery(struct proc *p, void *v, register_t *retval)
*/
error = copyout(&vaddr, SCARG(uap, addr), sizeof(void *));
}
-
+done:
if (fp != NULL)
FRELE(fp);
return (error);