Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1561910pxb; Sun, 22 Aug 2021 21:57:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwBNMQGHVBBPZorPoX+eZgAIvl4DYHUuK4aFHq6+obduGI3qZngAQyh3TdT7ptm+enVcyv8 X-Received: by 2002:aa7:c844:: with SMTP id g4mr2404687edt.37.1629694665255; Sun, 22 Aug 2021 21:57:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629694665; cv=none; d=google.com; s=arc-20160816; b=aLnlgvsAvvymxigV74d8FRuvRMLiD+8ZqF6YGVk8AG870LfcMnfRzs4Y3rr46FrsfU kuU6yrQgItBrC8IH1xfWX79SQg4p91FmUQskSBENboqiSgxTRW0NEm2CiFiBul311cuZ BsqS8/RT+34QQCV3e7CNaCtRRw14W03RRQ3d0tB5gys6vL5gKgGFgkvYFKsdO0JQL7WQ QtkS/Ve+ARdXsXq/LSuN+noOzSGUTJd3UdbMmcGIIDD911ChbbS8TtQMe3YkrNwsL1Sf B4TOBeo32PQiZUA/WtjBIouRmeLLixM0PD6gstQa8jjtrHn/7fFQMO27kUCbBDpim4JZ /koQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:organization:references:in-reply-to:date:cc:to:from :subject:message-id; bh=32hqAZ+pe3ttPW0BFQNYQtKHaJhTGh61rXRQriRuT8k=; b=UmZkfJSLDojovUfC9cPjQpqXJkf+nwLNth30sOIPBk3/lesFXd5ZiotmEzPY0m7GVo N4ZhDYuBdrjXor5jplCwY5ayEd/TQsoT4DaVgvpFEEAtHykMRwvz2pzSZ/OvGRsXrbmN bHw2T7XTrha0zAYZEDx20SQqRn+9eU4SsM9BONDV8W+lt/sg97EhEcSiz0r+gkwSyKRd VdL5jewQ5jKWnhh+kktSEDr2VtEl0ViNVQGykq8ScnO9ybToRE49sFDY7cb9UqxUR8Yb gcdd9xl6ijcQZJC/OXuxpHy9ce96dNtisDVpQJDBSGhss0HoeKe8lFjxWPs3QQJ8G5HN 4u8A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h16si2759065edz.437.2021.08.22.21.57.22; Sun, 22 Aug 2021 21:57:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232222AbhHWE4W (ORCPT + 99 others); Mon, 23 Aug 2021 00:56:22 -0400 Received: from cloud48395.mywhc.ca ([173.209.37.211]:52714 "EHLO cloud48395.mywhc.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229462AbhHWE4V (ORCPT ); Mon, 23 Aug 2021 00:56:21 -0400 Received: from modemcable064.203-130-66.mc.videotron.ca ([66.130.203.64]:60598 helo=[192.168.1.179]) by cloud48395.mywhc.ca with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mI1zm-0007f0-2F; Mon, 23 Aug 2021 00:55:38 -0400 Message-ID: Subject: Re: [PATCH] kernel: make TIF_NOTIFY_SIGNAL and core dumps co-exist From: Olivier Langlois To: Jens Axboe , LKML Cc: Linus Torvalds , "Eric W. Biederman" , Oleg Nesterov , Tony Battersby Date: Mon, 23 Aug 2021 00:55:36 -0400 In-Reply-To: <76d3418c-e9ba-4392-858a-5da8028e3526@kernel.dk> References: <76d3418c-e9ba-4392-858a-5da8028e3526@kernel.dk> Organization: Trillion01 Inc Content-Type: text/plain; charset="ISO-8859-1" User-Agent: Evolution 3.40.4 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cloud48395.mywhc.ca X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - trillion01.com X-Get-Message-Sender-Via: cloud48395.mywhc.ca: authenticated_id: olivier@trillion01.com X-Authenticated-Sender: cloud48395.mywhc.ca: olivier@trillion01.com X-Source: X-Source-Args: X-Source-Dir: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2021-08-17 at 21:06 -0600, Jens Axboe wrote: > task_work being added with notify == TWA_SIGNAL will utilize > TIF_NOTIFY_SIGNAL for signaling the targeted task that work is > available. > If this happens while a task is going through a core dump, it'll > potentially disturb and truncate the dump as a signal interruption. > > Have task_work_add() with notify == TWA_SIGNAL check if a task has > been > signaled for a core dump, and refuse to add the work if that is the > case. > When a core dump is invoked, explicitly check for TIF_NOTIFY_SIGNAL > and > run any pending task_work if that is set. This is similar to how an > exiting task will not get new task_work added, and we return the same > error for the core dump case. As we return success or failure from > task_work_add(), the caller has to be prepared to handle this case > already. > > Currently this manifests itself in that io_uring tasks that end up > using > task_work will experience truncated core dumps. > > Reported-by: Tony Battersby > Reported-by: Olivier Langlois > Cc: Eric W. Biederman > Cc: Oleg Nesterov > Cc: Linus Torvalds > Cc: stable@vger.kernel.org?# 5.10+ > Signed-off-by: Jens Axboe > > --- > > diff --git a/fs/coredump.c b/fs/coredump.c > index 07afb5ddb1c4..ca7c1ee44ada 100644 > --- a/fs/coredump.c > +++ b/fs/coredump.c > @@ -602,6 +602,14 @@ void do_coredump(const kernel_siginfo_t > *siginfo) > ????????????????.mm_flags = mm->flags, > ????????}; > ? > +???????/* > +??????? * task_work_add() will refuse to add work after PF_SIGNALED > has > +??????? * been set, ensure that we flush any pending > TIF_NOTIFY_SIGNAL work > +??????? * if any was queued before that. > +??????? */ > +???????if (test_thread_flag(TIF_NOTIFY_SIGNAL)) > +???????????????tracehook_notify_signal(); > + > ????????audit_core_dumps(siginfo->si_signo); > ? > ????????binfmt = mm->binfmt; > diff --git a/kernel/task_work.c b/kernel/task_work.c > index 1698fbe6f0e1..1ab28904adc4 100644 > --- a/kernel/task_work.c > +++ b/kernel/task_work.c > @@ -41,6 +41,12 @@ int task_work_add(struct task_struct *task, struct > callback_head *work, > ????????????????head = READ_ONCE(task->task_works); > ????????????????if (unlikely(head == &work_exited)) > ????????????????????????return -ESRCH; > +???????????????/* > +??????????????? * TIF_NOTIFY_SIGNAL notifications will interfere > with > +??????????????? * a core dump in progress, reject them. > +??????????????? */ > +???????????????if (notify == TWA_SIGNAL && (task->flags & > PF_SIGNALED)) > +???????????????????????return -ESRCH; > ????????????????work->next = head; > ????????} while (cmpxchg(&task->task_works, head, work) != head); > tested successfully on 5.12.19 Tested-by: Olivier Langlois