From f3815517f22d39fbd3458f8559467c947b1e291b Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 28 May 2018 13:27:43 +0200 Subject: [PATCH 1/2] start: do not init ns_clone_flags to -1 ns_clone_flags is used as a bitmask so initializing it to -1 is a bad idea. Signed-off-by: Christian Brauner --- src/lxc/start.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lxc/start.c b/src/lxc/start.c index 048b97b4f..7ec151e1c 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -619,8 +619,6 @@ void lxc_zero_handler(struct lxc_handler *handler) memset(handler, 0, sizeof(struct lxc_handler)); - handler->ns_clone_flags = -1; - handler->pinfd = -1; handler->sigfd = -1; From 386e676854f56268fae34cd84babae983c0d7f2e Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 28 May 2018 15:10:19 +0200 Subject: [PATCH 2/2] conf: ensure lxc_delete_tty() does not crash We need to make sure that the ttys are actually initialized otherwise deleting them is not safe. Signed-off-by: Christian Brauner --- src/lxc/conf.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index d7984bd0f..76cb255d6 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -968,6 +968,8 @@ int lxc_allocate_ttys(const char *name, struct lxc_conf *conf) for (i = 0; i < ttys->max; i++) { struct lxc_terminal_info *tty = &ttys->tty[i]; + tty->master = -EBADF; + tty->slave = -EBADF; ret = openpty(&tty->master, &tty->slave, tty->name, NULL, NULL); if (ret) { @@ -1004,11 +1006,21 @@ void lxc_delete_tty(struct lxc_tty_info *ttys) { int i; + if (!ttys->tty) + return; + for (i = 0; i < ttys->max; i++) { struct lxc_terminal_info *tty = &ttys->tty[i]; - close(tty->master); - close(tty->slave); + if (tty->master >= 0) { + close(tty->master); + tty->master = -EBADF; + } + + if (tty->slave >= 0) { + close(tty->slave); + tty->slave = -EBADF; + } } free(ttys->tty);