Module Name: src Committed By: chs Date: Mon Jan 7 16:54:54 UTC 2013
Modified Files: src/sys/kern: kern_resource.c Log Message: fix setrlimit(RLIMIT_STACK) for __MACHINE_STACK_GROWS_UP platforms. To generate a diff of this commit: cvs rdiff -u -r1.171 -r1.172 src/sys/kern/kern_resource.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_resource.c diff -u src/sys/kern/kern_resource.c:1.171 src/sys/kern/kern_resource.c:1.172 --- src/sys/kern/kern_resource.c:1.171 Fri Dec 21 19:39:48 2012 +++ src/sys/kern/kern_resource.c Mon Jan 7 16:54:54 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_resource.c,v 1.171 2012/12/21 19:39:48 njoly Exp $ */ +/* $NetBSD: kern_resource.c,v 1.172 2013/01/07 16:54:54 chs Exp $ */ /*- * Copyright (c) 1982, 1986, 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.171 2012/12/21 19:39:48 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.172 2013/01/07 16:54:54 chs Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -409,20 +409,21 @@ dosetrlimit(struct lwp *l, struct proc * vaddr_t addr; vsize_t size; vm_prot_t prot; + char *base, *tmp; + base = p->p_vmspace->vm_minsaddr; if (limp->rlim_cur > alimp->rlim_cur) { prot = VM_PROT_READ | VM_PROT_WRITE; size = limp->rlim_cur - alimp->rlim_cur; - addr = (vaddr_t)p->p_vmspace->vm_minsaddr - - limp->rlim_cur; + tmp = STACK_GROW(base, alimp->rlim_cur); } else { prot = VM_PROT_NONE; size = alimp->rlim_cur - limp->rlim_cur; - addr = (vaddr_t)p->p_vmspace->vm_minsaddr - - alimp->rlim_cur; + tmp = STACK_GROW(base, limp->rlim_cur); } + addr = (vaddr_t)STACK_ALLOC(tmp, size); (void) uvm_map_protect(&p->p_vmspace->vm_map, - addr, addr+size, prot, false); + addr, addr + size, prot, false); } break;