| From 0cd9d33ace336bc424fc30944aa3defd6786e4fe Mon Sep 17 00:00:00 2001 |
| From: Tejun Heo <tj@kernel.org> |
| Date: Thu, 30 Jan 2020 11:37:33 -0500 |
| Subject: cgroup: init_tasks shouldn't be linked to the root cgroup |
| |
| From: Tejun Heo <tj@kernel.org> |
| |
| commit 0cd9d33ace336bc424fc30944aa3defd6786e4fe upstream. |
| |
| 5153faac18d2 ("cgroup: remove cgroup_enable_task_cg_lists() |
| optimization") removed lazy initialization of css_sets so that new |
| tasks are always lniked to its css_set. In the process, it incorrectly |
| ended up adding init_tasks to root css_set. They show up as PID 0's in |
| root's cgroup.procs triggering warnings in systemd and generally |
| confusing people. |
| |
| Fix it by skip css_set linking for init_tasks. |
| |
| Signed-off-by: Tejun Heo <tj@kernel.org> |
| Reported-by: https://github.com/joanbm |
| Link: https://github.com/systemd/systemd/issues/14682 |
| Fixes: 5153faac18d2 ("cgroup: remove cgroup_enable_task_cg_lists() optimization") |
| Cc: stable@vger.kernel.org # v5.5+ |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/cgroup/cgroup.c | 13 ++++++++----- |
| 1 file changed, 8 insertions(+), 5 deletions(-) |
| |
| --- a/kernel/cgroup/cgroup.c |
| +++ b/kernel/cgroup/cgroup.c |
| @@ -5932,11 +5932,14 @@ void cgroup_post_fork(struct task_struct |
| |
| spin_lock_irq(&css_set_lock); |
| |
| - WARN_ON_ONCE(!list_empty(&child->cg_list)); |
| - cset = task_css_set(current); /* current is @child's parent */ |
| - get_css_set(cset); |
| - cset->nr_tasks++; |
| - css_set_move_task(child, NULL, cset, false); |
| + /* init tasks are special, only link regular threads */ |
| + if (likely(child->pid)) { |
| + WARN_ON_ONCE(!list_empty(&child->cg_list)); |
| + cset = task_css_set(current); /* current is @child's parent */ |
| + get_css_set(cset); |
| + cset->nr_tasks++; |
| + css_set_move_task(child, NULL, cset, false); |
| + } |
| |
| /* |
| * If the cgroup has to be frozen, the new task has too. Let's set |