Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com> Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> --- src/lxc/start.c | 18 ++++++++++++++++++ src/lxc/start.h | 1 + 2 files changed, 19 insertions(+)
diff --git a/src/lxc/start.c b/src/lxc/start.c index 1a7d5a3..87fc32f 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -379,6 +379,7 @@ out_sigfd: struct lxc_handler *lxc_init(const char *name, struct lxc_conf *conf, const char *lxcpath) { + int i; struct lxc_handler *handler; handler = malloc(sizeof(*handler)); @@ -392,6 +393,9 @@ struct lxc_handler *lxc_init(const char *name, struct lxc_conf *conf, const char handler->lxcpath = lxcpath; handler->pinfd = -1; + for (i = 0; i < LXC_NS_MAX; i++) + handler->nsfd[i] = -1; + lsm_init(); handler->name = strdup(name); @@ -482,10 +486,19 @@ out_free: void lxc_fini(const char *name, struct lxc_handler *handler) { + int i; + /* The STOPPING state is there for future cleanup code * which can take awhile */ lxc_set_state(name, handler, STOPPING); + + for (i = 0; i < LXC_NS_MAX; i++) { + if (handler->nsfd[i] != -1) { + close(handler->nsfd[i]); + handler->nsfd[i] = -1; + } + } lxc_set_state(name, handler, STOPPED); if (run_lxc_hooks(name, "post-stop", handler->conf, handler->lxcpath, NULL)) @@ -996,6 +1009,11 @@ static int lxc_spawn(struct lxc_handler *handler) goto out_delete_net; } + if (preserve_ns(handler->nsfd, handler->clone_flags, handler->pid) < 0) { + ERROR("failed to store namespace references"); + goto out_delete_net; + } + if (attach_ns(saved_ns_fd)) WARN("failed to restore saved namespaces"); diff --git a/src/lxc/start.h b/src/lxc/start.h index f1a41f5..86b19a2 100644 --- a/src/lxc/start.h +++ b/src/lxc/start.h @@ -75,6 +75,7 @@ struct lxc_handler { void *cgroup_data; int ttysock[2]; // socketpair for child->parent tty fd passing bool backgrounded; // indicates whether should we close std{in,out,err} on start + int nsfd[LXC_NS_MAX]; }; -- 2.1.4 _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel