From owner-freebsd-bugs@FreeBSD.ORG Sat Apr 12 10:40:20 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D03EE37B401 for ; Sat, 12 Apr 2003 10:40:20 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7260043F85 for ; Sat, 12 Apr 2003 10:40:20 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h3CHeJUp018926 for ; Sat, 12 Apr 2003 10:40:19 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h3CHeJoh018925; Sat, 12 Apr 2003 10:40:19 -0700 (PDT) Date: Sat, 12 Apr 2003 10:40:19 -0700 (PDT) Message-Id: <200304121740.h3CHeJoh018925@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Mark Kettenis Subject: Re: kern/44011: [PATCH] PT_CONTINUE, PT_KILL and PT_DETACH are broken X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Mark Kettenis List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Apr 2003 17:40:21 -0000 The following reply was made to PR kern/44011; it has been noted by GNATS. From: Mark Kettenis To: freebsd-gnats-submit@FreeBSD.org, kettenis@chello.nl Cc: Subject: Re: kern/44011: [PATCH] PT_CONTINUE, PT_KILL and PT_DETACH are broken Date: Sat, 12 Apr 2003 19:37:25 +0200 (CEST) Since the patch no longer applies cleanly, I updated it. Here's a version against revision 1.244 of kern_sig.c. I also updated the file at http://members.chello.nl/~m.m.kettenis/FreeBSD/5-current/ptrace.patch I hope somebody can look into this issue. Mark --- /usr/src/sys/kern/kern_sig.c.orig Sat Apr 12 04:54:46 2003 +++ /usr/src/sys/kern/kern_sig.c Sat Apr 12 18:47:41 2003 @@ -1918,7 +1918,6 @@ issignal(td) if (SIGISEMPTY(sigpending)) /* no signal to send */ return (0); sig = sig_ffs(&sigpending); - prop = sigprop(sig); _STOPEVENT(p, S_SIG, sig); @@ -1950,14 +1949,6 @@ issignal(td) PROC_LOCK(p); /* - * If the traced bit got turned off, go back up - * to the top to rescan signals. This ensures - * that p_sig* and ps_sigact are consistent. - */ - if ((p->p_flag & P_TRACED) == 0) - continue; - - /* * If parent wants us to take the signal, * then it will leave it in p->p_xstat; * otherwise we just look for signals again. @@ -1968,6 +1959,14 @@ issignal(td) continue; /* + * If the traced bit got turned off, go back up + * to the top to rescan signals. This ensures + * that p_sig* and ps_sigact are consistent. + */ + if ((p->p_flag & P_TRACED) == 0) + continue; + + /* * Put the new signal into td_siglist. If the * signal is being masked, look for other signals. */ @@ -1976,6 +1975,8 @@ issignal(td) continue; signotify(td); } + + prop = sigprop(sig); /* * Decide whether the signal should be returned.