summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-06-14 15:50:19 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-08-16 21:55:16 -0400
commit43ceb454348abcd91398fd2fa596bcf737c7ec8d (patch)
tree6601b3d9f31764a645be4f0e49bc2e109b113e8b
parentb9c1fac5ab58b646285374a5e52d98ee741dd166 (diff)
nspawn: Merge chown_cgroup(), sync_cgroup(), & create_subcgroup() into one cgroup_setup()
-rw-r--r--src/nspawn/nspawn-cgroup.c25
-rw-r--r--src/nspawn/nspawn-cgroup.h4
-rw-r--r--src/nspawn/nspawn.c10
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;