Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1840440ybh; Sun, 8 Mar 2020 14:40:50 -0700 (PDT) X-Google-Smtp-Source: ADFU+vt+t3gcKmA9395w7Y8WMrlSJ93zV/qD43e7JblrzDezvggCjK/rHOhdjksJJUrJpuvQhgAg X-Received: by 2002:aca:c0c5:: with SMTP id q188mr9159139oif.169.1583703650198; Sun, 08 Mar 2020 14:40:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583703650; cv=none; d=google.com; s=arc-20160816; b=cOHWn/z82EvFam0998hmKqdGqcl3pBa4c24lbtiA3SYOAQ45dUy5rDs/2NZqDpji9l lZbLeGWdA953eeYThLuhMD0e0nuYpVLf/bgcKMx8T3p7MfFaH5HAA9h4FjBdkzcZ0hcJ 25IIjDKWbMo1+CWhuMdVp0TdNZDqirIMc4ZRwPieIchwpTmO9U3I8p7JmFiaKOhKV9MI VbOCgwCnGdiPadWomfXZmvZB64tzG3PRoJjK/Qtkl98JnB64zaKckHCUwDKJm9MevOeJ RR0ynVXns7XNtzGKLlc0kMMe1iHdg9IJ0YascluF+WcMPP45Vzt953Nki0Y60wOgsGrr Yflg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:mime-version:user-agent :message-id:in-reply-to:date:references:cc:to:from; bh=AwvCSL/Rs+/m+jkDwaRU4/zXLw+U5vQ2IiNqlGRJcUo=; b=Jk6QRHm2ixKJJCY/QbVmYUmsNgNJQZGRrZDkBZGayxXYHLLkMpgyWbQDDKRO2uD6fO mMYrVivlslqS4UBw2rsdImtFeXhF+3RawRDgDmmG+YCBi6zx5j4A1FqZ4eBnxocvWtog w5cw2jfJLEhymxIGjSk9sqTt8F7GyTEAhcyP3uSOfphMQDqZI4hNlGJzYCEi3M7xUO17 g3vDIoXfdwleuolhnOFlol66ViRz81V1E0Y7SRqigmEdgTX742tuxEk7cDvNWzhyXQBa 1t+L3YpCsaxZfhOPbyDXdwKC+ZURv85NMPorRr+ZX+Zi94Ipk8RIScs42axraBoNSba4 U/bA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xmission.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i16si5263812otr.52.2020.03.08.14.40.38; Sun, 08 Mar 2020 14:40:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xmission.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726414AbgCHVkT (ORCPT + 99 others); Sun, 8 Mar 2020 17:40:19 -0400 Received: from out01.mta.xmission.com ([166.70.13.231]:38012 "EHLO out01.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726346AbgCHVkT (ORCPT ); Sun, 8 Mar 2020 17:40:19 -0400 Received: from in01.mta.xmission.com ([166.70.13.51]) by out01.mta.xmission.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jB3ej-0002V8-HH; Sun, 08 Mar 2020 15:40:17 -0600 Received: from ip68-227-160-95.om.om.cox.net ([68.227.160.95] helo=x220.xmission.com) by in01.mta.xmission.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.87) (envelope-from ) id 1jB3ei-0001yk-Px; Sun, 08 Mar 2020 15:40:17 -0600 From: ebiederm@xmission.com (Eric W. Biederman) To: Bernd Edlinger Cc: Christian Brauner , Kees Cook , Jann Horn , Jonathan Corbet , Alexander Viro , Andrew Morton , Alexey Dobriyan , Thomas Gleixner , Oleg Nesterov , Frederic Weisbecker , Andrei Vagin , Ingo Molnar , "Peter Zijlstra \(Intel\)" , Yuyang Du , David Hildenbrand , Sebastian Andrzej Siewior , Anshuman Khandual , David Howells , James Morris , Greg Kroah-Hartman , Shakeel Butt , Jason Gunthorpe , Christian Kellner , Andrea Arcangeli , Aleksa Sarai , "Dmitry V. Levin" , "linux-doc\@vger.kernel.org" , "linux-kernel\@vger.kernel.org" , "linux-fsdevel\@vger.kernel.org" , "linux-mm\@kvack.org" , "stable\@vger.kernel.org" , "linux-api\@vger.kernel.org" References: <87k142lpfz.fsf@x220.int.ebiederm.org> <875zfmloir.fsf@x220.int.ebiederm.org> <87v9nmjulm.fsf@x220.int.ebiederm.org> <202003021531.C77EF10@keescook> <20200303085802.eqn6jbhwxtmz4j2x@wittgenstein> <87v9nlii0b.fsf@x220.int.ebiederm.org> <87a74xi4kz.fsf@x220.int.ebiederm.org> <87r1y8dqqz.fsf@x220.int.ebiederm.org> <87tv32cxmf.fsf_-_@x220.int.ebiederm.org> <87v9ne5y4y.fsf_-_@x220.int.ebiederm.org> Date: Sun, 08 Mar 2020 16:38:00 -0500 In-Reply-To: <87v9ne5y4y.fsf_-_@x220.int.ebiederm.org> (Eric W. Biederman's message of "Sun, 08 Mar 2020 16:34:37 -0500") Message-ID: <875zfe5xzb.fsf_-_@x220.int.ebiederm.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-XM-SPF: eid=1jB3ei-0001yk-Px;;;mid=<875zfe5xzb.fsf_-_@x220.int.ebiederm.org>;;;hst=in01.mta.xmission.com;;;ip=68.227.160.95;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX19uDaHxN1o1BnoS4P9Gkr5iEXx0ynhPWgE= X-SA-Exim-Connect-IP: 68.227.160.95 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on sa02.xmission.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=8.0 tests=ALL_TRUSTED,BAYES_50, DCC_CHECK_NEGATIVE,T_TooManySym_01,XMSubLong autolearn=disabled version=3.4.2 X-Spam-Virus: No X-Spam-Report: * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP * 0.8 BAYES_50 BODY: Bayes spam probability is 40 to 60% * [score: 0.4161] * 0.7 XMSubLong Long Subject * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa02 1397; Body=1 Fuz1=1 Fuz2=1] * 0.0 T_TooManySym_01 4+ unique symbols in subject X-Spam-DCC: XMission; sa02 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: ;Bernd Edlinger X-Spam-Relay-Country: X-Spam-Timing: total 279 ms - load_scoreonly_sql: 0.03 (0.0%), signal_user_changed: 2.6 (0.9%), b_tie_ro: 1.87 (0.7%), parse: 0.75 (0.3%), extract_message_metadata: 8 (2.9%), get_uri_detail_list: 0.91 (0.3%), tests_pri_-1000: 13 (4.5%), tests_pri_-950: 0.91 (0.3%), tests_pri_-900: 0.79 (0.3%), tests_pri_-90: 24 (8.5%), check_bayes: 23 (8.1%), b_tokenize: 8 (2.9%), b_tok_get_all: 8 (2.8%), b_comp_prob: 1.56 (0.6%), b_tok_touch_all: 3.8 (1.4%), b_finish: 0.53 (0.2%), tests_pri_0: 221 (79.2%), check_dkim_signature: 0.41 (0.1%), check_dkim_adsp: 2.3 (0.8%), poll_dns_idle: 0.94 (0.3%), tests_pri_10: 1.64 (0.6%), tests_pri_500: 4.9 (1.8%), rewrite_mail: 0.00 (0.0%) Subject: [PATCH v2 4/5] exec: Move exec_mmap right after de_thread in flush_old_exec 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 in01.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I have read through the code in exec_mmap and I do not see anything that depends on sighand or the sighand lock, or on signals in anyway so this should be safe. This rearrangement of code has two siginficant benefits. It makes the determination of passing the point of no return by testing bprm->mm accurate. All failures prior to that point in flush_old_exec are either truly recoverable or they are fatal. Futher this consolidates all of the possible indefinite waits for userspace together at the top of flush_old_exec. The possible wait for a ptracer on PTRACE_EVENT_EXIT, the possible wait for a page fault to be resolved in clear_child_tid, and the possible wait for a page fault in exit_robust_list. This consolidation allows the creation of a mutex to replace cred_guard_mutex that is not held of possible indefinite userspace waits. Which will allow removing deadlock scenarios from the kernel. Signed-off-by: "Eric W. Biederman" --- fs/exec.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 215d86f77b63..d820a7272a76 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1272,18 +1272,6 @@ int flush_old_exec(struct linux_binprm * bprm) if (retval) goto out; -#ifdef CONFIG_POSIX_TIMERS - exit_itimers(me->signal); - flush_itimer_signals(); -#endif - - /* - * Make the signal table private. - */ - retval = unshare_sighand(me); - if (retval) - goto out; - /* * Must be called _before_ exec_mmap() as bprm->mm is * not visibile until then. This also enables the update @@ -1307,6 +1295,18 @@ int flush_old_exec(struct linux_binprm * bprm) */ bprm->mm = NULL; +#ifdef CONFIG_POSIX_TIMERS + exit_itimers(me->signal); + flush_itimer_signals(); +#endif + + /* + * Make the signal table private. + */ + retval = unshare_sighand(me); + if (retval) + goto out; + set_fs(USER_DS); me->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD | PF_NOFREEZE | PF_NO_SETAFFINITY); -- 2.25.0