[lxc-devel] [PATCH 2/2] c/r: re-open fds after clone()
Serge Hallyn
serge.hallyn at ubuntu.com
Mon Apr 20 17:06:02 UTC 2015
Quoting Tycho Andersen (tycho.andersen at canonical.com):
> If we don't re-open these after clone, the init process has a pointer to the
> parent's /dev/{zero,null}. CRIU seese these and wants to dump the parent's
> mount namespace, which is unnecessary. Instead, we should just re-open
> stdin/out/err after we do the clone and pivot root, to ensure that we have
> pointers to the devcies in init's rootfs instead of the host's.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
AFAICT you're switching this from doing it sometimes to doing it
always. That will break foreground containers.
I guess you may have to add a 'backgrounded' boolean to the
src/lxc/start.h:lxc_handler struct, set in lxcapi_start, and
checked in do_start to decide whether to do this.
> ---
> src/lxc/lxccontainer.c | 6 ------
> src/lxc/start.c | 7 +++++++
> 2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 0ca5b9f..2a536ed 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -642,12 +642,6 @@ static bool lxcapi_start(struct lxc_container *c, int useinit, char * const argv
> return false;
> }
> lxc_check_inherited(conf, true, -1);
> - close(0);
> - close(1);
> - close(2);
> - open("/dev/zero", O_RDONLY);
> - open("/dev/null", O_RDWR);
> - open("/dev/null", O_RDWR);
> setsid();
> } else {
> if (!am_single_threaded()) {
> diff --git a/src/lxc/start.c b/src/lxc/start.c
> index d615375..6939826 100644
> --- a/src/lxc/start.c
> +++ b/src/lxc/start.c
> @@ -759,6 +759,13 @@ static int do_start(void *data)
>
> close(handler->sigfd);
>
> + close(0);
> + close(1);
> + close(2);
> + open("/dev/zero", O_RDONLY);
> + open("/dev/null", O_RDWR);
> + open("/dev/null", O_RDWR);
> +
> /* after this call, we are in error because this
> * ops should not return as it execs */
> handler->ops->start(handler, handler->data);
> --
> 2.1.4
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
More information about the lxc-devel
mailing list