Merge pull request #1547 from brauner/2017-05-10/prevent_umount_propagation

start: remove umount2()
This commit is contained in:
Serge Hallyn 2017-05-10 10:43:53 -05:00 committed by GitHub
commit 60883ba8e1
2 changed files with 21 additions and 13 deletions

View File

@ -1287,23 +1287,23 @@ int prepare_ramfs_root(char *root)
char *p2; char *p2;
if (realpath(root, nroot) == NULL) if (realpath(root, nroot) == NULL)
return -1; return -errno;
if (chdir("/") == -1) if (chdir("/") == -1)
return -1; return -errno;
/* /*
* We could use here MS_MOVE, but in userns this mount is * We could use here MS_MOVE, but in userns this mount is
* locked and can't be moved. * locked and can't be moved.
*/ */
if (mount(root, "/", NULL, MS_REC | MS_BIND, NULL)) { if (mount(root, "/", NULL, MS_REC | MS_BIND, NULL) < 0) {
SYSERROR("Failed to move %s into /", root); SYSERROR("Failed to move %s into /", root);
return -1; return -errno;
} }
if (mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, NULL)) { if (mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, NULL) < 0) {
SYSERROR("Failed to make . rprivate"); SYSERROR("Failed to make . rprivate");
return -1; return -errno;
} }
/* /*
@ -1369,17 +1369,28 @@ int prepare_ramfs_root(char *root)
static int setup_pivot_root(const struct lxc_rootfs *rootfs) static int setup_pivot_root(const struct lxc_rootfs *rootfs)
{ {
if (!rootfs->path) if (!rootfs->path) {
DEBUG("container does not have a rootfs, so not doing pivot root");
return 0; return 0;
}
if (detect_ramfs_rootfs()) { if (detect_ramfs_rootfs()) {
if (prepare_ramfs_root(rootfs->mount)) DEBUG("detected that container is on ramfs");
if (prepare_ramfs_root(rootfs->mount)) {
ERROR("failed to prepare minimal ramfs root");
return -1; return -1;
} else if (setup_rootfs_pivot_root(rootfs->mount)) { }
ERROR("failed to setup pivot root");
DEBUG("prepared ramfs root for container");
return 0;
}
if (setup_rootfs_pivot_root(rootfs->mount) < 0) {
ERROR("failed to pivot root");
return -1; return -1;
} }
DEBUG("finished pivot root");
return 0; return 0;
} }

View File

@ -1289,9 +1289,6 @@ static int lxc_spawn(struct lxc_handler *handler)
if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_CGROUP)) if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_CGROUP))
return -1; return -1;
if (detect_shared_rootfs())
umount2(handler->conf->rootfs.mount, MNT_DETACH);
if (handler->ops->post_start(handler, handler->data)) if (handler->ops->post_start(handler, handler->data))
goto out_abort; goto out_abort;