diff options
| author | Mani Tofigh <mt4022@columbia.edu> | 2026-11-03 13:09:20 -0500 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2026-11-05 08:02:16 -1000 |
| commit | 8ab6980c70076db5f8c0c66a5fac06472b254333 (patch) | |
| tree | 8e136e538fbce815c9f6b35a0bc98be2c64ee8fa /scripts/Makefile.thinlto | |
| parent | fffbdad76a57eed26cff1be19f4cbb407f0b6e7c (diff) | |
| download | linux-next-8ab6980c70076db5f8c0c66a5fac06472b254333.tar.gz linux-next-8ab6980c70076db5f8c0c66a5fac06472b254333.zip | |
cgroup/freezer: walk exiting tasks in the v1 freezer
An exiting task can stay frozen after its v1 freezer cgroup is thawed.
Since commit a72f73c4dd9b ("cgroup: Don't expose dead tasks in cgroup")
the css task walk hides an exiting task once its process has no live
threads left. That count drops when another thread of the process
exits, which can happen between the freeze and the thaw walk. A pid
namespace init hits this easily since it waits freezably in
zap_pid_ns_processes() after commit 81933038f5e2 ("pid_namespace: make
zap_pid_ns_processes() freezable"):
Task A (pid ns init) Task B (A's thread) Task C
do_exit()
exit_signals()
do_exit()
zap_pid_ns_processes()
write FROZEN
/* A frozen */
/* live count 0 */
write THAWED
/* A skipped */
A then stays frozen even after SIGKILL:
[ 10.775155] task:fz-init state:D stack:28152 pid:65 tgid:65 ppid:1 task_flags:0xc0004c flags:0x00080000
[ 10.775176] Call Trace:
[ 10.775180] <TASK>
[ 10.775188] __schedule+0x10f1/0x4760
[ 10.775252] schedule+0xd7/0x2c0
[ 10.775265] zap_pid_ns_processes+0x2c7/0x5f0
[ 10.775346] do_exit+0x1bf4/0x2560
[ 10.775403] __x64_sys_exit+0x3d/0x50
[ 10.775414] x64_sys_call+0x156c/0x1570
[ 10.775425] do_syscall_64+0xfb/0x590
[ 10.775450] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 10.775529] </TASK>
Use CSS_TASK_ITER_WITH_DEAD in the three v1 freezer walks so they all
see the same tasks, as commit 60f21a264930 ("cgroup, sched_ext: Include
exiting tasks in cgroup iter") did for sched_ext. With the fix, A is
thawed and exits.
This bug was identified and confirmed with the help of a deterministic
hypervisor currently under development. The C reproducer below however
hits it within about 10s.
Fixes: a72f73c4dd9b ("cgroup: Don't expose dead tasks in cgroup")
Cc: stable@vger.kernel.org # v7.1+
Signed-off-by: Mani Tofigh <mt4022@columbia.edu>
Reviewed-by: Tao Cui <cuitao@kylinos.cn>
Tested-by: Tao Cui <cuitao@kylinos.cn>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
