summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorotto <otto@openbsd.org>2009-11-24 10:35:56 +0000
committerotto <otto@openbsd.org>2009-11-24 10:35:56 +0000
commitb9e718d46a0d88c60388e543bbe738e610a989d4 (patch)
tree4e67388b4b21055b1f429581a0f5dcb7dec37abf
parentkill some old cruft, in particular -F conflicts has never worked... (diff)
downloadwireguard-openbsd-b9e718d46a0d88c60388e543bbe738e610a989d4.tar.xz
wireguard-openbsd-b9e718d46a0d88c60388e543bbe738e610a989d4.zip
Proper check for wrapping high address and setting the break below the
base of data; with nicm@ ok miod@ guenther@
-rw-r--r--sys/uvm/uvm_unix.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/uvm/uvm_unix.c b/sys/uvm/uvm_unix.c
index 45c9f192558..ec7922cd9f3 100644
--- a/sys/uvm/uvm_unix.c
+++ b/sys/uvm/uvm_unix.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_unix.c,v 1.39 2009/06/17 22:19:12 kettenis Exp $ */
+/* $OpenBSD: uvm_unix.c,v 1.40 2009/11/24 10:35:56 otto Exp $ */
/* $NetBSD: uvm_unix.c,v 1.18 2000/09/13 15:00:25 thorpej Exp $ */
/*
@@ -73,15 +73,15 @@ sys_obreak(struct proc *p, void *v, register_t *retval)
syscallarg(char *) nsize;
} */ *uap = v;
struct vmspace *vm = p->p_vmspace;
- vaddr_t new, old;
+ vaddr_t new, old, base;
int error;
- old = (vaddr_t)vm->vm_daddr;
+ base = (vaddr_t)vm->vm_daddr;
new = round_page((vaddr_t)SCARG(uap, nsize));
- if ((new - old) > p->p_rlimit[RLIMIT_DATA].rlim_cur)
+ if (new < base || (new - base) > p->p_rlimit[RLIMIT_DATA].rlim_cur)
return (ENOMEM);
- old = round_page(old + ptoa(vm->vm_dsize));
+ old = round_page(base + ptoa(vm->vm_dsize));
if (new == old)
return (0);