From: Daniel Lezcano <daniel.lezcano-GANU6spQydw@public.gmane.org>
To: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
"Bruno Prémont"
<bonbons-ud5FBsm0p/xEiooADzr8i9i2O/JbrIOy@public.gmane.org>,
oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 0/1][V4] Handle reboot in a child pid namespace
Date: Tue, 13 Dec 2011 23:09:15 +0100 [thread overview]
Message-ID: <4EE7CD0B.60404@free.fr> (raw)
In-Reply-To: <1323649064-7960-1-git-send-email-daniel.lezcano-GANU6spQydw@public.gmane.org>
On 12/12/2011 01:17 AM, Daniel Lezcano wrote:
Does someone have an opinion for this patch ?
I cc'ed Bruno who should be interested by this feature too (sorry for
not cc'ing you before).
Oleg, I did not add your signed-off-by because I changed the patch but I
guess the V4 is what you expected to see, right ?
Thanks
-- Daniel
> ChangeLog:
> ==========
>
> * V4
> - store the signal number the child pid namespace init should
> exit from. It is simpler, cleaner, and does not add more encoding
> bits to the exit code of the process.
> * V3
> - removed lock and serialization of pid_ns_reboot
> * V2
> - added a lock for the pid namespace to prevent racy call
> to the 'reboot' syscall
> - Moved 'reboot' command assigned in zap_pid_ns_processes
> instead of wait_task_zombie
> - added tasklist lock around force_sig
> - added do_exit in pid_ns_reboot
> - used task_active_pid_ns instead of declaring a new variable in sys_reboot
> - moved code up before POWER_OFF changed to HALT in sys_reboot
>
>
> Test case:
> ==========
>
> #include <alloca.h>
> #include <stdio.h>
> #include <sched.h>
> #include <unistd.h>
> #include <signal.h>
> #include <sys/reboot.h>
> #include <sys/types.h>
> #include <sys/wait.h>
>
> #include <linux/reboot.h>
>
> static int do_reboot(void *arg)
> {
> int *cmd = arg;
>
> if (reboot(*cmd))
> printf("failed to reboot(%d): %m\n", *cmd);
> }
>
> int test_reboot(int cmd, int sig)
> {
> long stack_size = 4096;
> void *stack = alloca(stack_size) + stack_size;
> int status;
> pid_t ret;
>
> ret = clone(do_reboot, stack, CLONE_NEWPID | SIGCHLD, &cmd);
> if (ret < 0) {
> printf("failed to clone: %m\n");
> return -1;
> }
>
> if (wait(&status) < 0) {
> printf("unexpected wait error: %m\n");
> return -1;
> }
>
> if (!WIFSIGNALED(status)) {
> printf("child process exited but was not signaled\n");
> return -1;
> }
>
> if (WTERMSIG(status) != sig) {
> printf("signal termination is not the one expected\n");
> return -1;
> }
>
> return 0;
> }
>
> int main(int argc, char *argv[])
> {
> int status;
>
> status = test_reboot(LINUX_REBOOT_CMD_RESTART, SIGHUP);
> if (status < 0)
> return 1;
> printf("reboot(LINUX_REBOOT_CMD_RESTART) succeed\n");
>
> status = test_reboot(LINUX_REBOOT_CMD_RESTART2, SIGHUP);
> if (status < 0)
> return 1;
> printf("reboot(LINUX_REBOOT_CMD_RESTART2) succeed\n");
>
> status = test_reboot(LINUX_REBOOT_CMD_HALT, SIGINT);
> if (status < 0)
> return 1;
> printf("reboot(LINUX_REBOOT_CMD_HALT) succeed\n");
>
> status = test_reboot(LINUX_REBOOT_CMD_POWER_OFF, SIGINT);
> if (status < 0)
> return 1;
> printf("reboot(LINUX_REBOOT_CMD_POWERR_OFF) succeed\n");
>
> status = test_reboot(LINUX_REBOOT_CMD_CAD_ON, -1);
> if (status >= 0) {
> printf("reboot(LINUX_REBOOT_CMD_CAD_ON) should have failed\n");
> return 1;
> }
> printf("reboot(LINUX_REBOOT_CMD_CAD_ON) has failed as expected\n");
>
> return 0;
> }
>
> Daniel Lezcano (1):
> Add reboot_pid_ns to handle the reboot syscall
>
> include/linux/pid_namespace.h | 8 +++++++-
> kernel/pid_namespace.c | 33 +++++++++++++++++++++++++++++++++
> kernel/sys.c | 3 +++
> 3 files changed, 43 insertions(+), 1 deletions(-)
>
prev parent reply other threads:[~2011-12-13 22:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-12 0:17 [PATCH 0/1][V4] Handle reboot in a child pid namespace Daniel Lezcano
[not found] ` <1323649064-7960-1-git-send-email-daniel.lezcano-GANU6spQydw@public.gmane.org>
2011-12-12 0:17 ` [PATCH][V4] Add reboot_pid_ns to handle the reboot syscall Daniel Lezcano
[not found] ` <1323649064-7960-2-git-send-email-daniel.lezcano-GANU6spQydw@public.gmane.org>
2011-12-12 23:14 ` Serge E. Hallyn
2011-12-14 0:22 ` Andrew Morton
[not found] ` <20111213162242.1ab3cb1a.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2011-12-14 19:17 ` Oleg Nesterov
[not found] ` <20111214191739.GA14693-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-12-15 22:00 ` Andrew Morton
2011-12-13 22:09 ` Daniel Lezcano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EE7CD0B.60404@free.fr \
--to=daniel.lezcano-ganu6spqydw@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=bonbons-ud5FBsm0p/xEiooADzr8i9i2O/JbrIOy@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox