From 9241ebc796c11cf133c550f188f324bd2c12d89a Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 27 Mar 2024 14:29:25 +0200 Subject: [PATCH] thread_single(9): decline external requests for traced or debugger-stopped procs Debugger has the powers to cause unbound delay in single-threading, which then blocks the threaded taskqueue. The reproducer is `truss -f timeout 2 sleep 10`. Reported by: mjg Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D44523 --- sys/kern/kern_thread.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 5847d5ceab59..0bcd5c2f2add 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -1248,6 +1248,9 @@ thread_single(struct proc *p, int mode) return (1); msleep(&p->p_flag, &p->p_mtx, PCATCH, "thrsgl", 0); } + if ((p->p_flag & (P_STOPPED_SIG | P_TRACED)) != 0 || + (p->p_flag2 & P2_WEXIT) != 0) + return (1); } else if ((p->p_flag & P_HADTHREADS) == 0) return (0); if (p->p_singlethread != NULL && p->p_singlethread != td)