> Date: Sat, 23 Feb 2008 13:58:55 +0000 > From: Alexander Nasonov <[EMAIL PROTECTED]> > > Hi, > If I set a core limit to "unlimited" and a stack limit to 32768, > then run a program with indefinite recursion, the system would > generate 8G coredump file.
Does the attached diff fix your problem? Index: uvm_unix.c =================================================================== RCS file: /cvs/src/sys/uvm/uvm_unix.c,v retrieving revision 1.32 diff -u -p -r1.32 uvm_unix.c --- uvm_unix.c 5 Jan 2008 00:36:13 -0000 1.32 +++ uvm_unix.c 25 Feb 2008 21:15:10 -0000 @@ -166,7 +166,7 @@ uvm_coredump(p, vp, cred, chdr) struct vmspace *vm = p->p_vmspace; vm_map_t map = &vm->vm_map; vm_map_entry_t entry; - vaddr_t start, end; + vaddr_t start, end, top; struct coreseg cseg; off_t offset; int flag, error = 0; @@ -202,13 +202,17 @@ uvm_coredump(p, vp, cred, chdr) #ifdef MACHINE_STACK_GROWS_UP if (USRSTACK <= start && start < (USRSTACK + MAXSSIZ)) { - end = round_page(USRSTACK + ptoa(vm->vm_ssize)); + top = round_page(USRSTACK + ptoa(vm->vm_ssize)); + if (end > top) + end = top; + if (start >= end) continue; - start = USRSTACK; #else if (start >= (vaddr_t)vm->vm_maxsaddr) { - start = trunc_page(USRSTACK - ptoa(vm->vm_ssize)); + top = trunc_page(USRSTACK - ptoa(vm->vm_ssize)); + if (start < top) + start = top; if (start >= end) continue;