From d6497bbdb550b8e03d24e4803192282d7a150691 Mon Sep 17 00:00:00 2001 From: maxim Date: Thu, 2 Dec 2004 13:12:43 +0000 Subject: o Terminate an endless loop sh -T goes into in dowait() around waitproc(). XXX from Tor: "The shell can also go into a similar loop if the child was killed by signal 127, since the shell would believe the child to have only stopped (WIFSTOPPED() macro returns nonzero value). Disallowing signals 127 and 128 will fix that problem." See kern/19402 for details. PR: bin/66242 Submitted by: tegge Analysis and testcase by: demon MFC after: 3 weeks --- bin/sh/jobs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'bin/sh/jobs.c') diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c index 3c9ebea..8c19d22 100644 --- a/bin/sh/jobs.c +++ b/bin/sh/jobs.c @@ -926,7 +926,8 @@ dowait(int block, struct job *job) in_dowait--; if (breakwaitcmd != 0) { breakwaitcmd = 0; - return -1; + if (pid <= 0) + return -1; } if (pid <= 0) return pid; -- cgit v1.1