mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-10 13:57:25 +03:00
nspawn: enable all controllers we can for the "payload" subcgroup we create
In the unified hierarchy delegating controller access is safe, hence make sure to enable all controllers for the "payload" subcgroup if we create it, so that the container will have all controllers enabled the nspawn service itself has.
This commit is contained in:
parent
5f4c5fef66
commit
98e4d8d763
@ -2163,7 +2163,7 @@ int cg_enable_everywhere(CGroupMask supported, CGroupMask mask, const char *p) {
|
||||
|
||||
r = write_string_file(fs, s, 0);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to enable controller %s for %s (%s): %m", n, p, fs);
|
||||
log_debug_errno(r, "Failed to enable controller %s for %s (%s): %m", n, p, fs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4737,6 +4737,7 @@ static int create_subcgroup(pid_t pid) {
|
||||
_cleanup_free_ char *cgroup = NULL;
|
||||
const char *child;
|
||||
int unified, r;
|
||||
CGroupMask supported;
|
||||
|
||||
/* In the unified hierarchy inner nodes may only only contain
|
||||
* subgroups, but not processes. Hence, if we running in the
|
||||
@ -4756,6 +4757,10 @@ static int create_subcgroup(pid_t pid) {
|
||||
if (unified == 0)
|
||||
return 0;
|
||||
|
||||
r = cg_mask_supported(&supported);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine supported controllers: %m");
|
||||
|
||||
r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get our control group: %m");
|
||||
@ -4770,6 +4775,8 @@ static int create_subcgroup(pid_t pid) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create %s subcgroup: %m", child);
|
||||
|
||||
/* Try to enable as many controllers as possible for the new payload. */
|
||||
(void) cg_enable_everywhere(supported, supported, cgroup);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user