From owner-freebsd-stable@freebsd.org Sat Aug 29 19:27:46 2015 Return-Path: Delivered-To: freebsd-stable@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EB37E9C67F2 for ; Sat, 29 Aug 2015 19:27:46 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (relay04.stack.nl [IPv6:2001:610:1108:5010::107]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailhost.stack.nl", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id AC32F17A5 for ; Sat, 29 Aug 2015 19:27:46 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from snail.stack.nl (snail.stack.nl [IPv6:2001:610:1108:5010::131]) by mx1.stack.nl (Postfix) with ESMTP id 53DB7B8434; Sat, 29 Aug 2015 21:27:42 +0200 (CEST) Received: by snail.stack.nl (Postfix, from userid 1677) id 3D9CC28494; Sat, 29 Aug 2015 21:27:42 +0200 (CEST) Date: Sat, 29 Aug 2015 21:27:42 +0200 From: Jilles Tjoelker To: Konstantin Belousov Cc: Michiel Boland , Mark Martinec , freebsd-stable@freebsd.org Subject: Re: Latest stable (r287104) bash leaves zombies on exit Message-ID: <20150829192742.GA48807@stack.nl> References: <63a84f64baf8768a551fc6464e8e9526@mailbox.ijs.si> <20150827162602.GJ2072@kib.kiev.ua> <55DF5C95.90502@xs4all.nl> <20150827201644.GO2072@kib.kiev.ua> <55DFFADB.2080003@xs4all.nl> <20150828100118.GR2072@kib.kiev.ua> <55E083CA.2050705@xs4all.nl> <20150828161847.GX2072@kib.kiev.ua> <20150829130138.GA41321@stack.nl> <20150829134130.GC2072@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150829134130.GC2072@kib.kiev.ua> User-Agent: Mutt/1.5.21 (2010-09-15) X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Aug 2015 19:27:47 -0000 On Sat, Aug 29, 2015 at 04:41:30PM +0300, Konstantin Belousov wrote: > On Sat, Aug 29, 2015 at 03:01:38PM +0200, Jilles Tjoelker wrote: > > Looks good to me, except that I think a vforked child (in system() and > > posix_spawn*()) should use the system calls and not libthr's wrappers. > > This reduces the probability of weird things happening between vfork and > > exec, and also avoids an unexpected error when > > posix_spawnattr_setsigdefault()'s mask contains SIGTHR. > Thank you for the review, I agree with the note about vfork. Updated > patch is below. Also, I removed the PIC_PROLOGUE from the i386 setjmp, > it has no use after the plt calls are removed. > [snip] > diff --git a/lib/libc/gen/posix_spawn.c b/lib/libc/gen/posix_spawn.c > index e3124b2..673c760 100644 > --- a/lib/libc/gen/posix_spawn.c > +++ b/lib/libc/gen/posix_spawn.c > @@ -118,15 +118,18 @@ process_spawnattr(const posix_spawnattr_t sa) > return (errno); > } > > - /* Set signal masks/defaults */ > + /* > + * Set signal masks/defaults. > + * Use unwrapped syscall, libthr is in undefined state after vfork(). > + */ > if (sa->sa_flags & POSIX_SPAWN_SETSIGMASK) { > - _sigprocmask(SIG_SETMASK, &sa->sa_sigmask, NULL); > + __libc_sigprocmask(SIG_SETMASK, &sa->sa_sigmask, NULL); > } > > if (sa->sa_flags & POSIX_SPAWN_SETSIGDEF) { > for (i = 1; i <= _SIG_MAXSIG; i++) { > if (sigismember(&sa->sa_sigdefault, i)) > - if (_sigaction(i, &sigact, NULL) != 0) > + if (__libc_sigaction(i, &sigact, NULL) != 0) > return (errno); > } > } Hmm, the comments say direct syscalls are being used, but in fact libthr's interposer is called. The change to system() does correctly use __sys_sigprocmask(). -- Jilles Tjoelker