Date: Thu, 14 May 2026 00:57:11 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 1aa72148d19f - stable/15 - vm_map_growstack(): give a hint to user that stack was blown out Message-ID: <6a051de7.2065e.642938a5@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=1aa72148d19fbf73ec1c864ac9efbc9c37c4d8d3 commit 1aa72148d19fbf73ec1c864ac9efbc9c37c4d8d3 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2026-05-06 22:53:59 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-05-14 00:48:03 +0000 vm_map_growstack(): give a hint to user that stack was blown out (cherry picked from commit 18c5a26f8a747583b9bca3a6a1ae9db1ed4591a3) --- sys/vm/vm_map.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 0a81e62d2d63..7ead7d7e6472 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -4723,6 +4723,11 @@ vm_map_stack_locked(vm_map_t map, vm_offset_t addrbos, vm_size_t max_ssize, return (rv); } +static bool report_stackoverflow = true; +SYSCTL_BOOL(_vm, OID_AUTO, report_stackoverflow, CTLFLAG_RWTUN, + &report_stackoverflow, 0, + "uprintf() on stack overflow"); + /* * Attempts to grow a vm stack entry. Returns KERN_SUCCESS if we * successfully grow the stack. @@ -4787,8 +4792,12 @@ retry: if (guard > max_grow) return (KERN_NO_SPACE); max_grow -= guard; - if (grow_amount > max_grow) + if (grow_amount > max_grow) { + if (report_stackoverflow) + uprintf("pid %d comm %s tid %d stack overflow\n", + p->p_pid, p->p_comm, td->td_tid); return (KERN_NO_SPACE); + } /* * If this is the main process stack, see if we're over the stack @@ -4796,8 +4805,12 @@ retry: */ is_procstack = addr >= (vm_offset_t)vm->vm_maxsaddr && addr < (vm_offset_t)vm->vm_stacktop; - if (is_procstack && (ctob(vm->vm_ssize) + grow_amount > stacklim)) + if (is_procstack && (ctob(vm->vm_ssize) + grow_amount > stacklim)) { + if (report_stackoverflow) + uprintf("pid %d comm %s tid %d stack overflow\n", + p->p_pid, p->p_comm, td->td_tid); return (KERN_NO_SPACE); + } #ifdef RACCT if (racct_enable) {home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a051de7.2065e.642938a5>
