From 45d43fcee124c168d83149c3fca0d7660fdb2925 Mon Sep 17 00:00:00 2001 From: Pavel Tikhomirov Date: Mon, 22 Jun 2020 18:50:55 +0300 Subject: [PATCH] cgroup: make prepare_task_cgroup lookup current cgset in ancestors In case if our parent is a dead task (zombie) or a helper which in it's turn has zombie parent, and parent thus has zero cg_set we should look for current cgset deeper. Fixes: #1066 Signed-off-by: Pavel Tikhomirov --- criu/cgroup.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/criu/cgroup.c b/criu/cgroup.c index d4c712167..3737772df 100644 --- a/criu/cgroup.c +++ b/criu/cgroup.c @@ -1210,14 +1210,19 @@ static int move_in_cgroup(CgSetEntry *se, bool setup_cgns) int prepare_task_cgroup(struct pstree_item *me) { + struct pstree_item *parent = me->parent; CgSetEntry *se; u32 current_cgset; if (!rsti(me)->cg_set) return 0; - if (me->parent) - current_cgset = rsti(me->parent)->cg_set; + /* Zombies and helpers can have cg_set == 0 so we skip them */ + while (parent && !rsti(parent)->cg_set) + parent = parent->parent; + + if (parent) + current_cgset = rsti(parent)->cg_set; else current_cgset = root_cg_set;