[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230605130444.1421-1-zoucao@kuaishou.com>
Date: Mon, 5 Jun 2023 21:04:44 +0800
From: Zou Cao <zoucaox@...il.com>
To: linux-kernel@...r.kernel.org, tj@...nel.org
Cc: cgroups@...r.kernel.org, lizefan.x@...edance.com,
hannes@...xchg.org, brauner@...nel.org,
Zou Cao <zoucao@...ishou.com>
Subject: [PATCH] cgroup: fixed the cset refcnt leak when fork() failed
TeamID: B1486294
when fork, cset will be increased by commit "ef2c41cf38a7", the refcnt will
be decrease by child exit, but when failed in fork(), this refcnt will
be lost decrease in cgroup_cancel_fork as follow:
copy_process
|
cgroup_can_fork // increase the css refcount
......
spin_lock_irq(&css_set_lock);
cset = task_css_setcurrent);
get_css_set(cset);
spin_unlock_irq&css_set_lock);
......
|
goto cgroup_cancel_fork // if failed in copy_process
|
cgroup_cancel_fork // lost the decrease refcount if flag not CLONE_INTO_CGROUP
Fixes: ef2c41cf38a7 ("clone3: allow spawning processes into cgroups")
Signed-off-by: Zou Cao <zoucao@...ishou.com>
---
kernel/cgroup/cgroup.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index d18c2ef..5ecd706 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -6284,6 +6284,11 @@ void cgroup_cancel_fork(struct task_struct *child,
if (ss->cancel_fork)
ss->cancel_fork(child, kargs->cset);
+ if (!(kargs->flags & CLONE_INTO_CGROUP) &&
+ kargs->cset) {
+ put_css_set(kargs->cset);
+ }
+
cgroup_css_set_put_fork(kargs);
}
--
1.8.3.1
Powered by blists - more mailing lists