UBUNTU: SAUCE: Add reboot_pid_ns to handle the reboot syscall
authorDaniel Lezcano <daniel.lezcano@free.fr>
Thu, 5 Jan 2012 09:06:50 +0000 (10:06 +0100)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 2 Apr 2012 20:18:27 +0000 (13:18 -0700)
commita479dcb8fc330d08dca43101dc538def5de92cce
tree9b1329701f30c1dbc7223df5fa4ad254ac9e3b3e
parentf4494c921400634a3c2b3d97dbd987b0da28aa79
UBUNTU: SAUCE: Add reboot_pid_ns to handle the reboot syscall

In the case of a child pid namespace, rebooting the system does not
really makes sense. When the pid namespace is used in conjunction
with the other namespaces in order to create a linux container, the
reboot syscall leads to some problems.

A container can reboot the host. That can be fixed by dropping
the sys_reboot capability but we are unable to correctly to poweroff/
halt/reboot a container and the container stays stuck at the shutdown
time with the container's init process waiting indefinitively.

After several attempts, no solution from userspace was found to reliabily
handle the shutdown from a container.

This patch propose to make the init process of the child pid namespace to
exit with a signal status set to : SIGINT if the child pid namespace called
"halt/poweroff" and SIGHUP if the child pid namespace called "reboot".
When the reboot syscall is called and we are not in the initial
pid namespace, we kill the pid namespace for "HALT", "POWEROFF", "RESTART",
and "RESTART2". Otherwise we return EINVAL.

Returning EINVAL is also an easy way to check if this feature is supported
by the kernel when invoking another 'reboot' option like CAD.

By this way the parent process of the child pid namespace knows if
it rebooted or not and can take the right decision.

Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>

BugLink: http://bugs.launchpad.net/bugs/914676

(backported from https://lkml.org/lkml/2012/1/5/58)
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>
include/linux/pid_namespace.h
kernel/pid_namespace.c
kernel/sys.c