In case the stack size reaches its limit and its growth must be restricted,
ensure that grow_amount is a multiple of the page size. Otherwise, the kernel may crash in swap_reserve_by_uid() on HEAD and FreeBSD 8.x, and produce a core file with a missing stack on FreeBSD 7.x. Diagnosed and reported by: jilles Reviewed by: kib MFC after: 1 week
This commit is contained in:
parent
94b78d528f
commit
e48262487a
@ -3338,7 +3338,8 @@ vm_map_growstack(struct proc *p, vm_offset_t addr)
|
||||
if (grow_amount > stack_entry->avail_ssize)
|
||||
grow_amount = stack_entry->avail_ssize;
|
||||
if (is_procstack && (ctob(vm->vm_ssize) + grow_amount > stacklim)) {
|
||||
grow_amount = stacklim - ctob(vm->vm_ssize);
|
||||
grow_amount = trunc_page((vm_size_t)stacklim) -
|
||||
ctob(vm->vm_ssize);
|
||||
}
|
||||
|
||||
/* If we would blow our VMEM resource limit, no go */
|
||||
|
Loading…
Reference in New Issue
Block a user