On Thu, 13 Jun 2013 10:09:59 -0500 Serge Hallyn <serge.hal...@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.hal...@ubuntu.com> Acked-by: Dwight Engen <dwight.en...@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); } ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel