diff options
author | 2003-04-18 23:47:59 +0000 | |
---|---|---|
committer | 2003-04-18 23:47:59 +0000 | |
commit | bdbe75d0e9c821e8cb2d91f95ce3f4ff2bc94a94 (patch) | |
tree | b53003a327aeee85635bf98c5e979585a80aedf6 | |
parent | support for making directories executable if readable. (diff) | |
download | wireguard-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.c | 16 |
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); |