nspawn: reject existing cgroupfs mount if cgns is enabled

This commit is contained in:
Mike Yuan
2025-03-16 22:42:02 +01:00
parent 02c4d27b17
commit b26a994fb8
3 changed files with 7 additions and 4 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;
}