From: Oleg Nesterov <oleg@redhat.com>
To: Christian Brauner <brauner@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>,
linux-fsdevel@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>, Jan Kara <jack@suse.cz>,
NeilBrown <neil@brown.name>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
linux-mm@kvack.org, io-uring@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH v2 1/7] fork: refuse new threads while a coredump or an exec is in progress
Date: Fri, 18 Sep 2026 12:40:45 +0200 [thread overview]
Message-ID: <aq0VLTyxNatFmLOK@redhat.com> (raw)
In-Reply-To: <20260917-work-coredump-fixes-v2-1-f3787fcda051@kernel.org>
On 09/17, Christian Brauner wrote:
>
> Say a SQPOLL thread is a member of a thread-group that coredumps.
> The coredump code uses zap_process() and sends SIGKILL. The SQPOLL
> thread uses io_sqd_handle_event() and calls get_signal(). It removes
> SIGKILL from the pending set and returns. The SQPOLL thread breaks out
> of the loop and drains its own task work.
>
> Any pending io_req_task_submit() with REQ_F_FORCE_ASYNC creates a new
> worker when no other worker is free. So it ends up calling
> create_io_thread() from a thread whose fatal signal is gone.
Oh.. Can we fix this in the io_uring/ code somehow? The very fact that
copy_process() can be called after get_signal() returns SIGKILL looks
very wrong to me. See below.
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -2491,8 +2491,10 @@ __latent_entropy struct task_struct *copy_process(
> goto bad_fork_core_free;
> }
>
> - /* Let kill terminate clone/fork in the middle */
> - if (fatal_signal_pending(current)) {
> + /* Let kill or a group exit, exec or coredump abort clone/fork */
> + if (fatal_signal_pending(current) ||
> + (current->signal->flags & SIGNAL_GROUP_EXIT) ||
> + current->signal->group_exec_task || current->in_execve) {
Well, the comment doesn't explain why should we care about exec or coredump,
if we forget about the problem above fatal_signal_pending() must be true.
At least, can we move these additional checks into create_io_thread() ?
To not uglify copy_process()...
Hmm... get_signal() sets PF_SIGNALED before it checks PF_USER_WORKER, so
perhaps something like below can work?
And perhaps io_should_retry_thread() should check PF_SIGNALED too?
Oleg.
--- x/kernel/fork.c
+++ x/kernel/fork.c
@@ -2700,6 +2700,9 @@ struct task_struct *create_io_thread(int
.user_worker = 1,
};
+ if (current->flags && PF_SIGNALED)
+ return -EINTR;
+
return copy_process(NULL, 0, node, &args);
}
next prev parent reply other threads:[~2026-09-18 10:40 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-17 9:17 [PATCH v2 0/7] coredump & signals: an impossible affair Christian Brauner
2026-09-17 9:17 ` [PATCH v2 1/7] fork: refuse new threads while a coredump or an exec is in progress Christian Brauner
2026-09-17 16:33 ` Bradley Morgan
2026-09-18 10:40 ` Oleg Nesterov [this message]
2026-09-18 12:24 ` Christian Brauner
2026-09-18 12:52 ` Christian Brauner
2026-09-18 13:41 ` Oleg Nesterov
2026-09-18 14:29 ` Christian Brauner
2026-09-18 15:00 ` Christian Brauner
2026-09-18 15:15 ` Christian Brauner
2026-09-21 10:32 ` Oleg Nesterov
2026-09-21 11:46 ` Christian Brauner
2026-09-21 12:37 ` Oleg Nesterov
2026-09-17 9:17 ` [PATCH v2 2/7] coredump: hold RCU while releasing parked threads Christian Brauner
2026-09-17 9:17 ` [PATCH v2 3/7] signal: only SIGKILL and the freezers interrupt a coredumping task Christian Brauner
2026-09-17 9:17 ` [PATCH v2 4/7] coredump: parse a snapshot of core_pattern Christian Brauner
2026-09-18 15:28 ` Oleg Nesterov
2026-09-17 9:17 ` [PATCH v2 5/7] io-wq: order the exit bit against worker creation task work Christian Brauner
2026-09-18 14:55 ` Oleg Nesterov
2026-09-17 9:17 ` [PATCH v2 6/7] signal: don't retarget shared signals in a dying thread group Christian Brauner
2026-09-18 14:24 ` Oleg Nesterov
2026-09-17 9:17 ` [PATCH v2 7/7] selftests/coredump: test shared signal retargeting during a dump Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aq0VLTyxNatFmLOK@redhat.com \
--to=oleg@redhat.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=io-uring@vger.kernel.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mingo@redhat.com \
--cc=neil@brown.name \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.