From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: linux-rt-devel@lists.linux.dev, cgroups@vger.kernel.org
Cc: "Tejun Heo" <tj@kernel.org>,
"Johannes Weiner" <hannes@cmpxchg.org>,
"Michal Koutný" <mkoutny@suse.com>,
"Clark Williams" <clrkwllms@kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Bert Karwatzki" <spasswolf@web.de>
Subject: [PATCH] cgroup: Don't expose dead tasks in cgroup
Date: Mon, 2 Mar 2026 13:07:38 +0100 [thread overview]
Message-ID: <20260302120738.6KkDipsR@linutronix.de> (raw)
Once a task exits it has its state set to TASK_DEAD and then it is
removed the cgroup it belonged to. The last step happens on the task
gets out of its last schedule() invocation and is delayed on PREEMPT_RT
due to locking constrains.
As a result it is possible to receive a pid via waitpid() of a task
which is still listed in cgroup.procs for the cgroup it belonged
to. This is something that systemd does not expect and as a result it
waits for its exit until a time out occurs.
This can be avoided by skipping tasks which are in the DEAD state. There
is no need to verify both task states under task_struct::pi_lock because
once the task is exiting after is its last schedule, there will not be
any sleeping locks.
Reported-by: Bert Karwatzki <spasswolf@web.de>
Closes: https://lore.kernel.org/all/20260219164648.3014-1-spasswolf@web.de/
Tested-by: Bert Karwatzki <spasswolf@web.de>
Fixes: 9311e6c29b348 ("cgroup: Fix sleeping from invalid context warning on PREEMPT_RT")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
Tejun, with this change, would it be okay to
- replace the irq-work with kworker? With this change it should address
your concern regarding "run in definite time" as mentioned in [0]. So
it might be significantly delayed but it shouldn't be visible.
This would lift the restriction that a irq-work needs to run on this
CPU and the kworker could run on any CPU.
- would it be okay to treat RT and !RT equally here (and do this delayed
cgroup_task_dead() in both cases)
[0] https://lore.kernel.org/all/aQzg9kcnCsdRQiB4@slm.duckdns.org/
kernel/cgroup/cgroup.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index c22cda7766d84..a8254229d62d3 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -5283,6 +5283,11 @@ static void *cgroup_procs_start(struct seq_file *s, loff_t *pos)
static int cgroup_procs_show(struct seq_file *s, void *v)
{
+ struct task_struct *tsk = v;
+
+ if (READ_ONCE(tsk->__state) & TASK_DEAD)
+ return 0;
+
seq_printf(s, "%d\n", task_pid_vnr(v));
return 0;
}
--
2.51.0
next reply other threads:[~2026-03-02 12:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-02 12:07 Sebastian Andrzej Siewior [this message]
2026-03-02 21:56 ` [PATCH] cgroup: Don't expose dead tasks in cgroup Tejun Heo
2026-03-03 13:13 ` Sebastian Andrzej Siewior
2026-03-03 17:59 ` Tejun Heo
2026-03-03 20:22 ` Tejun Heo
2026-03-04 19:16 ` Sebastian Andrzej Siewior
2026-03-04 19:22 ` Tejun Heo
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=20260302120738.6KkDipsR@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=cgroups@vger.kernel.org \
--cc=clrkwllms@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=mkoutny@suse.com \
--cc=rostedt@goodmis.org \
--cc=spasswolf@web.de \
--cc=tj@kernel.org \
/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.