init_ctx->personality = personality;
init_ctx->container = lxc_container_new(name, lxcpath);
- if (!init_ctx->container)
+ if (!init_ctx->container) {
+ lxc_proc_put_context_info(init_ctx);
return -1;
+ }
if (!init_ctx->container->lxc_conf) {
init_ctx->container->lxc_conf = lxc_conf_init();
- if (!init_ctx->container->lxc_conf)
+ if (!init_ctx->container->lxc_conf) {
+ lxc_proc_put_context_info(init_ctx);
return -ENOMEM;
+ }
}
if (!fetch_seccomp(init_ctx->container, options))
if (ret <= 0) {
ERROR("Expected to receive sequence number 0: %s.", strerror(errno));
shutdown(ipc_sockets[1], SHUT_RDWR);
+ lxc_proc_put_context_info(init_ctx);
rexit(-1);
}
if (ret < 0) {
ERROR("Failed to enter namespaces.");
shutdown(ipc_sockets[1], SHUT_RDWR);
+ lxc_proc_put_context_info(init_ctx);
rexit(-1);
}
/* close namespace file descriptors */
if (pid <= 0) {
SYSERROR("Failed to create subprocess.");
shutdown(ipc_sockets[1], SHUT_RDWR);
+ lxc_proc_put_context_info(init_ctx);
rexit(-1);
}
*/
ERROR("Intended to send pid %d: %s.", pid, strerror(errno));
shutdown(ipc_sockets[1], SHUT_RDWR);
+ lxc_proc_put_context_info(init_ctx);
rexit(-1);
}
/* The rest is in the hands of the initial and the attached process. */
+ lxc_proc_put_context_info(init_ctx);
rexit(0);
}