mirror of
https://github.com/systemd/systemd.git
synced 2026-08-04 15:10:33 +00:00
nspawn: reject existing cgroupfs mount if cgns is enabled
This commit is contained in:
@@ -134,7 +134,7 @@ int create_subcgroup(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mount_cgroups(const char *dest) {
|
||||
int mount_cgroups(const char *dest, bool accept_existing) {
|
||||
const char *p;
|
||||
int r;
|
||||
|
||||
@@ -146,6 +146,9 @@ int mount_cgroups(const char *dest) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine if %s is mounted already: %m", p);
|
||||
if (r > 0) {
|
||||
if (!accept_existing)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EEXIST), "Refusing existing cgroupfs mount: %s", p);
|
||||
|
||||
if (access(strjoina(p, "/cgroup.procs"), F_OK) >= 0)
|
||||
return 0;
|
||||
if (errno != ENOENT)
|
||||
|
||||
@@ -13,5 +13,5 @@ int create_subcgroup(
|
||||
int userns_fd,
|
||||
UserNamespaceMode userns_mode);
|
||||
|
||||
int mount_cgroups(const char *dest);
|
||||
int mount_cgroups(const char *dest, bool accept_existing);
|
||||
int bind_mount_cgroup_hierarchy(void);
|
||||
|
||||
@@ -3342,7 +3342,7 @@ static int inner_child(
|
||||
if (r < 0)
|
||||
return log_error_errno(errno, "Failed to unshare cgroup namespace: %m");
|
||||
|
||||
r = mount_cgroups(/* dest = */ NULL);
|
||||
r = mount_cgroups(/* dest = */ NULL, /* accept_existing = */ false);
|
||||
} else
|
||||
r = bind_mount_cgroup_hierarchy();
|
||||
if (r < 0)
|
||||
@@ -4217,7 +4217,7 @@ static int outer_child(
|
||||
(void) write_string_filef(p, WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MODE_0444, SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(arg_uuid));
|
||||
|
||||
if (!arg_use_cgns) {
|
||||
r = mount_cgroups(directory);
|
||||
r = mount_cgroups(directory, /* accept_existing = */ true);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user