mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-30 21:43:13 +00:00
Quick bug fix for missing fd for move_in_cgroup
There is an issue where if the proccess to be killed spawns a child proccess and moves it in a child cgroup of the one the parent process is in, the cgroup fd was being closed in the parent process before it forked the child. Then when move_in_cgroup() is called for the child process, the file descriptor has already been closed causing a failure for the second call to move_in_cgroup(). Moved the fd close after the fork call. Change-Id: I6ae88b95c5410a7f56108e28eb3133f113e868d0 Signed-off-by: Garrison Bellack <gbellack@google.com> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
7a203afe0a
commit
9752c11d23
2 changed files with 8 additions and 1 deletions
1
cgroup.c
1
cgroup.c
|
|
@ -619,7 +619,6 @@ static int move_in_cgroup(CgSetEntry *se)
|
|||
}
|
||||
}
|
||||
|
||||
close_service_fd(CGROUP_YARD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1388,6 +1388,14 @@ static int restore_task_with_children(void *_arg)
|
|||
if (create_children_and_session())
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* This must be done after forking to allow child
|
||||
* to get the cgroup fd so it can move into the
|
||||
* correct /tasks file if it is in a different cgroup
|
||||
* set than its parent
|
||||
*/
|
||||
close_service_fd(CGROUP_YARD);
|
||||
|
||||
if (restore_task_mnt_ns(current))
|
||||
goto err;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue