[lxc-devel] [PATCH] don't set up console for lxc-execute
Dwight Engen
dwight.engen at oracle.com
Thu Jun 13 15:37:43 UTC 2013
On Thu, 13 Jun 2013 10:09:59 -0500
Serge Hallyn <serge.hallyn at ubuntu.com> wrote:
> Currently due to some safety checks for !rootfs.path, lxc-execute
> works ok if you do not set lxc.rootfs at all in your lxc.conf. But if
> you set lxc.rootfs = '/', then it sets up console, and when you do an
> lxc-execute, the console appears hung.
>
> However the lxc.rootfs NULL check was just incidental to not
> dereference a NULL pointer. In fact we should not be setting up a
> console if the container isn't running a full-fledged distro with a
> getty/login running on the container's /dev/console.
>
> Have lxc_execute() mark in lxc_conf that this is a lxc-execute and not
> an lxc-start, and don't set up the console.
>
> The issue is documented at https://sourceforge.net/p/lxc/bugs/67/ .
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Dwight Engen <dwight.engen at oracle.com>
> ---
> src/lxc/conf.c | 4 ++--
> src/lxc/conf.h | 1 +
> src/lxc/console.c | 10 ++++++++++
> src/lxc/execute.c | 1 +
> 4 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index a4ed218..d3dc9a5 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -2836,7 +2836,7 @@ int lxc_setup(const char *name, struct lxc_conf
> *lxc_conf) }
> }
>
> - if (setup_console(&lxc_conf->rootfs, &lxc_conf->console,
> lxc_conf->ttydir)) {
> + if (!lxc_conf->is_execute &&
> setup_console(&lxc_conf->rootfs, &lxc_conf->console,
> lxc_conf->ttydir)) { ERROR("failed to setup the console for '%s'",
> name); return -1; }
> @@ -2846,7 +2846,7 @@ int lxc_setup(const char *name, struct lxc_conf
> *lxc_conf) ERROR("failed to setup kmsg for '%s'", name);
> }
>
> - if (setup_tty(&lxc_conf->rootfs, &lxc_conf->tty_info,
> lxc_conf->ttydir)) {
> + if (!lxc_conf->is_execute && setup_tty(&lxc_conf->rootfs,
> &lxc_conf->tty_info, lxc_conf->ttydir)) { ERROR("failed to setup the
> ttys for '%s'", name); return -1;
> }
> diff --git a/src/lxc/conf.h b/src/lxc/conf.h
> index 2fd3ab1..9b1677e 100644
> --- a/src/lxc/conf.h
> +++ b/src/lxc/conf.h
> @@ -251,6 +251,7 @@ struct saved_nic {
> };
>
> struct lxc_conf {
> + int is_execute;
> char *fstab;
> int tty;
> int pts;
> diff --git a/src/lxc/console.c b/src/lxc/console.c
> index f801e0b..125890f 100644
> --- a/src/lxc/console.c
> +++ b/src/lxc/console.c
> @@ -276,6 +276,11 @@ int lxc_console_mainloop_add(struct
> lxc_epoll_descr *descr, struct lxc_conf *conf = handler->conf;
> struct lxc_console *console = &conf->console;
>
> + if (conf->is_execute) {
> + INFO("no console for lxc-execute.");
> + return 0;
> + }
> +
> if (!conf->rootfs.path) {
> INFO("no rootfs, no console.");
> return 0;
> @@ -564,6 +569,11 @@ int lxc_console_create(struct lxc_conf *conf)
> {
> struct lxc_console *console = &conf->console;
>
> + if (conf->is_execute) {
> + INFO("no console for lxc-execute.");
> + return 0;
> + }
> +
> if (!conf->rootfs.path)
> return 0;
>
> diff --git a/src/lxc/execute.c b/src/lxc/execute.c
> index 9bf33ca..3cf3540 100644
> --- a/src/lxc/execute.c
> +++ b/src/lxc/execute.c
> @@ -158,5 +158,6 @@ int lxc_execute(const char *name, char *const
> argv[], int quiet, if (lxc_check_inherited(conf, -1))
> return -1;
>
> + conf->is_execute = 1;
> return __lxc_start(name, conf, &execute_start_ops, &args,
> lxcpath); }
More information about the lxc-devel
mailing list