Fix stack grow for init.

During early stages of kern_exec(), including strings copyout,
p_textvp for init is NULL.  This prevented stack grow from working for
init execution.

Without stack gap enabled, initial stack segment size is enough for
strings passed by kernel to init.  With the gap enabled, the used
address might fall out of the initial segment, which kills init.

Exclude initproc from the check for contexts which should not cause
stack grow in the target map.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2019-08-08 16:48:19 +00:00
parent b706be23b4
commit 10ae16c7fe
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350758

View File

@ -4217,7 +4217,8 @@ vm_map_growstack(vm_map_t map, vm_offset_t addr, vm_map_entry_t gap_entry)
* debugger or AIO daemon. The reason is that the wrong
* resource limits are applied.
*/
if (map != &p->p_vmspace->vm_map || p->p_textvp == NULL)
if (p != initproc && (map != &p->p_vmspace->vm_map ||
p->p_textvp == NULL))
return (KERN_FAILURE);
MPASS(!map->system_map);