diff options
author | 2015-02-09 09:39:09 +0000 | |
---|---|---|
committer | 2015-02-09 09:39:09 +0000 | |
commit | 7180d9eacf3fa4f4bbf2bba838f7e88c69d5a232 (patch) | |
tree | 1c23da888d41a425a0c8cb6a37776f82c6deacaf /sys/kern/kern_resource.c | |
parent | No need to check for va < USRSTACK before invoking uvm_grow() on behalf of (diff) | |
download | wireguard-openbsd-7180d9eacf3fa4f4bbf2bba838f7e88c69d5a232.tar.xz wireguard-openbsd-7180d9eacf3fa4f4bbf2bba838f7e88c69d5a232.zip |
Stop using USRSTACK as the edge of the stack, but rather use the vmspace
vm_minsaddr or vm_maxsaddr, depending upon the direction the stack goes in.
This should have no effect on the existing behaviourrr.
ok kettenis@ deraadt@
Diffstat (limited to 'sys/kern/kern_resource.c')
-rw-r--r-- | sys/kern/kern_resource.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c index 29b8b089e04..c0d6f8d95ed 100644 --- a/sys/kern/kern_resource.c +++ b/sys/kern/kern_resource.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_resource.c,v 1.53 2014/12/19 05:59:21 tedu Exp $ */ +/* $OpenBSD: kern_resource.c,v 1.54 2015/02/09 09:39:09 miod Exp $ */ /* $NetBSD: kern_resource.c,v 1.38 1996/10/23 07:19:38 matthias Exp $ */ /*- @@ -279,27 +279,32 @@ dosetrlimit(struct proc *p, u_int which, struct rlimit *limp) vaddr_t addr; vsize_t size; vm_prot_t prot; + struct vmspace *vm = p->p_vmspace; if (limp->rlim_cur > alimp->rlim_cur) { prot = PROT_READ | PROT_WRITE; size = limp->rlim_cur - alimp->rlim_cur; #ifdef MACHINE_STACK_GROWS_UP - addr = USRSTACK + alimp->rlim_cur; + addr = (vaddr_t)vm->vm_maxsaddr + + alimp->rlim_cur; #else - addr = USRSTACK - limp->rlim_cur; + addr = (vaddr_t)vm->vm_minsaddr - + limp->rlim_cur; #endif } else { prot = PROT_NONE; size = alimp->rlim_cur - limp->rlim_cur; #ifdef MACHINE_STACK_GROWS_UP - addr = USRSTACK + limp->rlim_cur; + addr = (vaddr_t)vm->vm_maxsaddr + + limp->rlim_cur; #else - addr = USRSTACK - alimp->rlim_cur; + addr = (vaddr_t)vm->vm_minsaddr - + alimp->rlim_cur; #endif } addr = trunc_page(addr); size = round_page(size); - (void) uvm_map_protect(&p->p_vmspace->vm_map, + (void) uvm_map_protect(&vm->vm_map, addr, addr+size, prot, FALSE); } } |