mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-30 20:48:25 +00:00
Merge pull request #2140 from brauner/2018-02-08/cgfsng_fix_ro_remount
cgfsng: add required remount flags
This commit is contained in:
commit
d99e66cd14
@ -1923,7 +1923,7 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
|
|||||||
char *controllerpath, char *cgpath,
|
char *controllerpath, char *cgpath,
|
||||||
const char *container_cgroup)
|
const char *container_cgroup)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, remount_flags;
|
||||||
char *sourcepath;
|
char *sourcepath;
|
||||||
int flags = MS_BIND;
|
int flags = MS_BIND;
|
||||||
|
|
||||||
@ -1935,6 +1935,9 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
remount_flags = add_required_remount_flags(controllerpath,
|
||||||
|
controllerpath,
|
||||||
|
flags | MS_REMOUNT);
|
||||||
ret = mount(controllerpath, controllerpath, "cgroup",
|
ret = mount(controllerpath, controllerpath, "cgroup",
|
||||||
MS_REMOUNT | MS_BIND | MS_RDONLY, NULL);
|
MS_REMOUNT | MS_BIND | MS_RDONLY, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -1959,13 +1962,15 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
|
|||||||
INFO("Mounted \"%s\" onto \"%s\"", h->controllers[0], cgpath);
|
INFO("Mounted \"%s\" onto \"%s\"", h->controllers[0], cgpath);
|
||||||
|
|
||||||
if (flags & MS_RDONLY) {
|
if (flags & MS_RDONLY) {
|
||||||
ret = mount(sourcepath, cgpath, "cgroup",
|
remount_flags = add_required_remount_flags(sourcepath, cgpath,
|
||||||
MS_REMOUNT | flags | MS_RDONLY, NULL);
|
flags | MS_REMOUNT);
|
||||||
|
ret = mount(sourcepath, cgpath, "cgroup", remount_flags, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SYSERROR("Failed to remount \"%s\" ro", cgpath);
|
SYSERROR("Failed to remount \"%s\" ro", cgpath);
|
||||||
free(sourcepath);
|
free(sourcepath);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
INFO("Remounted %s read-only", cgpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(sourcepath);
|
free(sourcepath);
|
||||||
@ -1973,7 +1978,8 @@ static int do_secondstage_mounts_if_needed(int type, struct hierarchy *h,
|
|||||||
return 0;
|
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;
|
int ret;
|
||||||
char *controllers = NULL;
|
char *controllers = NULL;
|
||||||
@ -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
|
* will not have CAP_SYS_ADMIN after it has started we
|
||||||
* need to mount the cgroups manually.
|
* 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);
|
free(controllerpath);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
Loading…
Reference in New Issue
Block a user