From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751703AbdFFTQy (ORCPT ); Tue, 6 Jun 2017 15:16:54 -0400 Received: from out02.mta.xmission.com ([166.70.13.232]:51906 "EHLO out02.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751905AbdFFTOi (ORCPT ); Tue, 6 Jun 2017 15:14:38 -0400 From: "Eric W. Biederman" To: linux-kernel@vger.kernel.org Cc: linux-api@vger.kernel.org, Linus Torvalds , Oleg Nesterov , Ingo Molnar , Thomas Gleixner , Kees Cook , Roland McGrath , Al Viro , David Howells , "Michael Kerrisk (man-pages)" , "Eric W. Biederman" Date: Tue, 6 Jun 2017 14:03:26 -0500 Message-Id: <20170606190338.28347-14-ebiederm@xmission.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170606190338.28347-1-ebiederm@xmission.com> References: <877f0pym71.fsf@xmission.com> <20170606190338.28347-1-ebiederm@xmission.com> X-XM-SPF: eid=1dIJuR-0006wd-UT;;;mid=<20170606190338.28347-14-ebiederm@xmission.com>;;;hst=in02.mta.xmission.com;;;ip=97.121.81.159;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX19DNFgwymje0stY+VuXSkPlYwKBO/miMXQ= X-SA-Exim-Connect-IP: 97.121.81.159 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Report: * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP * 1.5 XMNoVowels Alpha-numberic number with no vowels * 0.7 XMSubLong Long Subject * 0.0 TVD_RCVD_IP Message was received from an IP address * 0.8 BAYES_50 BODY: Bayes spam probability is 40 to 60% * [score: 0.5000] * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa06 1397; Body=1 Fuz1=1 Fuz2=1] * 0.0 T_TooManySym_01 4+ unique symbols in subject X-Spam-DCC: XMission; sa06 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: **;linux-kernel@vger.kernel.org X-Spam-Relay-Country: X-Spam-Timing: total 5539 ms - load_scoreonly_sql: 0.04 (0.0%), signal_user_changed: 2.6 (0.0%), b_tie_ro: 1.81 (0.0%), parse: 0.77 (0.0%), extract_message_metadata: 11 (0.2%), get_uri_detail_list: 1.32 (0.0%), tests_pri_-1000: 6 (0.1%), tests_pri_-950: 1.18 (0.0%), tests_pri_-900: 1.00 (0.0%), tests_pri_-400: 20 (0.4%), check_bayes: 19 (0.3%), b_tokenize: 7 (0.1%), b_tok_get_all: 6 (0.1%), b_comp_prob: 1.88 (0.0%), b_tok_touch_all: 2.7 (0.0%), b_finish: 0.62 (0.0%), tests_pri_0: 185 (3.3%), check_dkim_signature: 0.52 (0.0%), check_dkim_adsp: 2.8 (0.0%), tests_pri_500: 5309 (95.9%), poll_dns_idle: 5303 (95.7%), rewrite_mail: 0.00 (0.0%) Subject: [PATCH 14/26] wait: Move changing of ptrace from wait_consider_task into wait_task_stopped X-Spam-Flag: No X-SA-Exim-Version: 4.2.1 (built Thu, 05 May 2016 13:38:54 -0600) X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With the freeing and slaying of zombies moved earlier in wait_consider_task changing of the ptrace value only effects the clearing of notask_error and wait_task_stopped. Move the changing of ptrace into wait_task_stopped. The value of ptrace coming into the code clearing notask_error is left at it's original value. Signed-off-by: "Eric W. Biederman" --- kernel/exit.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index 9b70e21c960d..dbf3fce00a1f 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1194,6 +1194,16 @@ static int wait_task_stopped(struct wait_opts *wo, pid_t pid; /* + * Hide group stop state from real parent; otherwise a single + * stop can be reported twice as group and ptrace stop. If a + * ptracer wants to distinguish these two events for its own + * children it should create a separate process which takes the + * role of real parent. + */ + if (!ptrace && p->ptrace && !ptrace_reparented(p)) + ptrace = 1; + + /* * Traditionally we see ptrace'd stopped tasks regardless of options. */ if (!ptrace && !(wo->wo_flags & WUNTRACED)) @@ -1370,18 +1380,6 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, return 0; } - if (likely(!ptrace) && unlikely(p->ptrace)) { - /* - * Hide group stop state from real parent; otherwise a single - * stop can be reported twice as group and ptrace stop. If a - * ptracer wants to distinguish these two events for its own - * children it should create a separate process which takes the - * role of real parent. - */ - if (!ptrace_reparented(p)) - ptrace = 1; - } - if (exit_state == EXIT_ZOMBIE) { /* * Allow access to stopped/continued state via zombie by @@ -1403,7 +1401,8 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, * target task dies. Only continued and exited can happen. * Clear notask_error if WCONTINUED | WEXITED. */ - if (likely(!ptrace) || (wo->wo_flags & (WCONTINUED | WEXITED))) + if ((!ptrace && (!p->ptrace || ptrace_reparented(p))) || + (wo->wo_flags & (WCONTINUED | WEXITED))) wo->notask_error = 0; } else { /* -- 2.10.1