diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2017-06-14 15:50:19 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-08-16 21:55:16 -0400 |
commit | 43ceb454348abcd91398fd2fa596bcf737c7ec8d (patch) | |
tree | 6601b3d9f31764a645be4f0e49bc2e109b113e8b | |
parent | b9c1fac5ab58b646285374a5e52d98ee741dd166 (diff) |
nspawn: Merge chown_cgroup(), sync_cgroup(), & create_subcgroup() into one cgroup_setup()
-rw-r--r-- | src/nspawn/nspawn-cgroup.c | 25 | ||||
-rw-r--r-- | src/nspawn/nspawn-cgroup.h | 4 | ||||
-rw-r--r-- | src/nspawn/nspawn.c | 10 |
3 files changed, 24 insertions, 15 deletions
diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c index 1150d3b4c2..b44bf24f3e 100644 --- a/src/nspawn/nspawn-cgroup.c +++ b/src/nspawn/nspawn-cgroup.c @@ -43,7 +43,7 @@ static int chown_cgroup_path(const char *path, uid_t uid_shift) { return 0; } -int chown_cgroup(pid_t pid, CGroupUnified inner_cgver, uid_t uid_shift) { +static int chown_cgroup(pid_t pid, CGroupUnified inner_cgver, uid_t uid_shift) { _cleanup_free_ char *path = NULL, *fs = NULL; int r; @@ -75,7 +75,7 @@ int chown_cgroup(pid_t pid, CGroupUnified inner_cgver, uid_t uid_shift) { return 0; } -int sync_cgroup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift) { +static int sync_cgroup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift) { _cleanup_free_ char *cgroup = NULL; char tree[] = "/tmp/unifiedXXXXXX", pid_string[DECIMAL_STR_MAX(pid) + 1]; bool undo_mount = false; @@ -137,7 +137,7 @@ finish: return r; } -int create_subcgroup(pid_t pid, bool keep_unit, CGroupUnified outer_cgver, CGroupUnified inner_cgver) { +static int create_subcgroup(pid_t pid, bool keep_unit, CGroupUnified outer_cgver, CGroupUnified inner_cgver) { _cleanup_free_ char *cgroup = NULL; CGroupMask supported; const char *payload; @@ -190,6 +190,25 @@ int create_subcgroup(pid_t pid, bool keep_unit, CGroupUnified outer_cgver, CGrou return 0; } +int cgroup_setup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift, bool keep_unit) { + + int r; + + r = sync_cgroup(pid, outer_cgver, inner_cgver, uid_shift); + if (r < 0) + return r; + + r = create_subcgroup(pid, keep_unit, outer_cgver, inner_cgver); + if (r < 0) + return r; + + r = chown_cgroup(pid, inner_cgver, uid_shift); + if (r < 0) + return r; + + return 0; +} + /* Retrieve existing subsystems. This function is called in a new cgroup * namespace. */ diff --git a/src/nspawn/nspawn-cgroup.h b/src/nspawn/nspawn-cgroup.h index e4ff6b5269..40672d8f91 100644 --- a/src/nspawn/nspawn-cgroup.h +++ b/src/nspawn/nspawn-cgroup.h @@ -6,9 +6,7 @@ #include "cgroup-util.h" -int chown_cgroup(pid_t pid, CGroupUnified inner_cgver, uid_t uid_shift); -int sync_cgroup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift); -int create_subcgroup(pid_t pid, bool keep_unit, CGroupUnified outer_cgver, CGroupUnified inner_cgver); +int cgroup_setup(pid_t pid, CGroupUnified outer_cgver, CGroupUnified inner_cgver, uid_t uid_shift, bool keep_unit); int mount_cgroups(const char *dest, CGroupUnified outer_cgver, CGroupUnified inner_cgver, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context, bool use_cgns); int mount_systemd_cgroup_writable(const char *dest, CGroupUnified inner_cgver); diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 2f49dc03ee..daf179b18b 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -3979,15 +3979,7 @@ static int run(int master, } else if (arg_slice || arg_property) log_notice("Machine and scope registration turned off, --slice= and --property= settings will have no effect."); - r = sync_cgroup(*pid, outer_cgver, arg_inner_cgver, arg_uid_shift); - if (r < 0) - return r; - - r = create_subcgroup(*pid, arg_keep_unit, outer_cgver, arg_inner_cgver); - if (r < 0) - return r; - - r = chown_cgroup(*pid, arg_inner_cgver, arg_uid_shift); + r = cgroup_setup(*pid, outer_cgver, arg_inner_cgver, arg_uid_shift, arg_keep_unit); if (r < 0) return r; |