Skip to content

Commit

Permalink
Merge pull request #2140 from brauner/2018-02-08/cgfsng_fix_ro_remount
Browse files Browse the repository at this point in the history
cgfsng: add required remount flags
  • Loading branch information
stgraber committed Feb 8, 2018
2 parents ca20a3b + 5285689 commit d99e66c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
16 changes: 11 additions & 5 deletions src/lxc/cgroups/cgfsng.c
Expand Up @@ -1923,7 +1923,7 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
char *controllerpath, char *cgpath,
const char *container_cgroup)
{
int ret;
int ret, remount_flags;
char *sourcepath;
int flags = MS_BIND;

Expand All @@ -1935,6 +1935,9 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
return -1;
}

remount_flags = add_required_remount_flags(controllerpath,
controllerpath,
flags | MS_REMOUNT);
ret = mount(controllerpath, controllerpath, "cgroup",
MS_REMOUNT | MS_BIND | MS_RDONLY, NULL);
if (ret < 0) {
Expand All @@ -1959,21 +1962,24 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
INFO("Mounted \"%s\" onto \"%s\"", h->controllers[0], cgpath);

if (flags & MS_RDONLY) {
ret = mount(sourcepath, cgpath, "cgroup",
MS_REMOUNT | flags | MS_RDONLY, NULL);
remount_flags = add_required_remount_flags(sourcepath, cgpath,
flags | MS_REMOUNT);
ret = mount(sourcepath, cgpath, "cgroup", remount_flags, NULL);
if (ret < 0) {
SYSERROR("Failed to remount \"%s\" ro", cgpath);
free(sourcepath);
return -1;
}
INFO("Remounted %s read-only", cgpath);
}

free(sourcepath);
INFO("Completed second stage cgroup automounts for \"%s\"", cgpath);
return 0;
}

static int mount_cgroup_cgns_supported(int type, struct hierarchy *h, const char *controllerpath)
static int cg_mount_in_cgroup_namespace(int type, struct hierarchy *h,
const char *controllerpath)
{
int ret;
char *controllers = NULL;
Expand Down Expand Up @@ -2066,7 +2072,7 @@ static bool cgfsng_mount(void *hdata, const char *root, int type)
* will not have CAP_SYS_ADMIN after it has started we
* need to mount the cgroups manually.
*/
r = mount_cgroup_cgns_supported(type, h, controllerpath);
r = cg_mount_in_cgroup_namespace(type, h, controllerpath);
free(controllerpath);
if (r < 0)
goto bad;
Expand Down
2 changes: 1 addition & 1 deletion src/lxc/conf.c
Expand Up @@ -575,7 +575,7 @@ int pin_rootfs(const char *rootfs)
* NOEXEC etc are honored.
*/
unsigned long add_required_remount_flags(const char *s, const char *d,
unsigned long flags)
unsigned long flags)
{
#ifdef HAVE_STATVFS
struct statvfs sb;
Expand Down

0 comments on commit d99e66c

Please sign in to comment.