Skip to content

Commit

Permalink
Merge pull request #1606 from brauner/2017-06-01/lxc_setup_after_cgro…
Browse files Browse the repository at this point in the history
…up_unshare

call lxc_setup() after unshare(CLONE_NEWCGROUP)
  • Loading branch information
hallyn committed Jul 25, 2017
2 parents fa1bafd + f415203 commit c1cecfd
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/lxc/conf.c
Expand Up @@ -4237,7 +4237,7 @@ int lxc_setup(struct lxc_handler *handler)
return -1;
}

NOTICE("'%s' is setup.", name);
NOTICE("Container \"%s\" is set up", name);

return 0;
}
Expand Down
31 changes: 19 additions & 12 deletions src/lxc/start.c
Expand Up @@ -1012,12 +1012,6 @@ static int do_start(void *data)
"standard file descriptors. Migration will not work.");
}

/* Setup the container, ip, names, utsname, ... */
if (lxc_setup(handler)) {
ERROR("Failed to setup container \"%s\".", handler->name);
goto out_warn_father;
}

/* Ask father to setup cgroups and wait for him to finish. */
if (lxc_sync_barrier_parent(handler, LXC_SYNC_CGROUP))
goto out_error;
Expand All @@ -1042,6 +1036,12 @@ static int do_start(void *data)
INFO("Unshared CLONE_NEWCGROUP.");
}

/* Setup the container, ip, names, utsname, ... */
if (lxc_setup(handler)) {
ERROR("Failed to setup container \"%s\".", handler->name);
goto out_warn_father;
}

/* Set the label to change to when we exec(2) the container's init. */
if (lsm_process_label_set(NULL, handler->conf, 1, 1) < 0)
goto out_warn_father;
Expand Down Expand Up @@ -1161,6 +1161,9 @@ static int do_start(void *data)

setsid();

if (lxc_sync_barrier_parent(handler, LXC_SYNC_CGROUP_LIMITS))
goto out_warn_father;

/* After this call, we are in error because this ops should not return
* as it execs.
*/
Expand Down Expand Up @@ -1485,20 +1488,18 @@ static int lxc_spawn(struct lxc_handler *handler)
goto out_delete_net;
}

if (lxc_sync_barrier_child(handler, LXC_SYNC_CGROUP_UNSHARE))
goto out_delete_net;

if (!cgroup_setup_limits(handler, true)) {
ERROR("Failed to setup the devices cgroup for container \"%s\".", name);
goto out_delete_net;
}
TRACE("Set up cgroup device limits");

cgroup_disconnect();
cgroups_connected = false;

/* Read tty fds allocated by child. */
if (lxc_recv_ttys_from_child(handler) < 0) {
ERROR("Failed to receive tty info from child process.");
goto out_delete_net;
}

/* Tell the child to complete its initialization and wait for it to exec
* or return an error. (The child will never return
* LXC_SYNC_POST_CGROUP+1. It will either close the sync pipe, causing
Expand All @@ -1508,6 +1509,12 @@ static int lxc_spawn(struct lxc_handler *handler)
if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_CGROUP))
return -1;

/* Read tty fds allocated by child. */
if (lxc_recv_ttys_from_child(handler) < 0) {
ERROR("Failed to receive tty info from child process.");
goto out_delete_net;
}

if (handler->ops->post_start(handler, handler->data))
goto out_abort;

Expand Down
2 changes: 2 additions & 0 deletions src/lxc/sync.h
Expand Up @@ -30,6 +30,8 @@ enum {
LXC_SYNC_CONFIGURE,
LXC_SYNC_POST_CONFIGURE,
LXC_SYNC_CGROUP,
LXC_SYNC_CGROUP_UNSHARE,
LXC_SYNC_CGROUP_LIMITS,
LXC_SYNC_POST_CGROUP,
LXC_SYNC_RESTART,
LXC_SYNC_POST_RESTART,
Expand Down

0 comments on commit c1cecfd

Please sign in to comment.