From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757812AbbJVNvo (ORCPT ); Thu, 22 Oct 2015 09:51:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52851 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757778AbbJVNvm (ORCPT ); Thu, 22 Oct 2015 09:51:42 -0400 Message-ID: <5628E9E7.4020500@redhat.com> Date: Thu, 22 Oct 2015 15:51:35 +0200 From: Denys Vlasenko User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Oleg Nesterov , Andrew Morton , Dmitry Vyukov CC: Alexander Potapenko , Eric Dumazet , Jan Kratochvil , Julien Tinnes , Kees Cook , Kostya Serebryany , Linus Torvalds , "Michael Kerrisk (man-pages)" , Pedro Alves , Robert Swiecki , Roland McGrath , syzkaller@googlegroups.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] wait/ptrace: always assume __WALL if the child is traced References: <20151020171754.GA29304@redhat.com> In-Reply-To: <20151020171754.GA29304@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/20/2015 07:17 PM, Oleg Nesterov wrote: > creates the unreapable zombie if /sbin/init doesn't use __WALL. > > This is not a kernel bug, at least in a sense that everything works as > expected: debugger should reap a traced sub-thread before it can reap > the leader, but without __WALL/__WCLONE do_wait() ignores sub-threads. > > Unfortunately, it seems that /sbin/init in most (all?) distributions > doesn't use it and we have to change the kernel to avoid the problem. > > This patch just adds the "ptrace" check into eligible_child(). To some > degree this matches the "tsk->ptrace" in exit_notify(), ->exit_signal > is mostly ignored when the tracee reports to debugger. > > This obviously means the user-visible change: __WCLONE and __WALL no > longer have any meaning for debugger. And I can only hope that this > won't break something. > > We could make a more conservative change. Say, we can take __WCLONE > into account, or !thread_group_leader(). But it would be nice to not > complicate these historical/confusing checks. For the record, I like this way of fixing the problem too. It removes the need to ever use __WALL in userspace: IIRC the only case where it was needed are debuggers. Which in turn makes *all* underscored wait flags (__WCLONE, __WALL, __WNOTHREAD) unnecessary for any sane application use.