
On Thu, Jul 21, 2016 at 03:37:24PM +0000, Katerina Koukiou wrote:
This patch forces container's init process, to become a session leader, that is its session ID is made the same as its process ID. That might seem unnecessary in general, but if we want to checkpoint a container with CRIU, which is needed for container migration, we must ensure that the SID of each process inside the container points to a process that lives in the same PID namespace as the container. Therefore, we force that the session leader is the init.
Signed-off-by: Katerina Koukiou <k.koukiou@gmail.com> --- src/lxc/lxc_container.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 916a37b..b857431 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -2245,6 +2245,14 @@ static int lxcContainerChild(void *data) argv->npassFDs, argv->passFDs) < 0) goto cleanup;
+ /* Make init process of the container the leader of the new session. + * That is needed when checkpointing container. + */ + if (setsid() < 0) { + virReportSystemError(errno, "%s", + _("Unable to become session leader")); + }
Needs a goto cleanup, otherwise the error code gets set to 0
+ ret = 0; cleanup: VIR_FREE(ttyPath);
This is a clear bugfix we need even ignoring CRIU reqiurements, so I've pushed this with the fix mentioned. For example, it fixes running of a shell as pid 1 which previously reported sh: cannot set terminal process group (-1): Inappropriate ioctl for device sh: no job control in this shell Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|