diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-03-18 04:06:36 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-03-18 04:48:26 +0100 |
commit | a641dcd9bf05418d6a6c165e1c0cff615b4a0f47 (patch) | |
tree | 05ee777b6af4921b848dd99f68bd5d468557d6c5 | |
parent | 50933da01b71d3f5a0b869731fc41ce89881db69 (diff) |
cgroup: it's not OK to invoke alloca() in loops
-rw-r--r-- | src/core/mount-setup.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index 387030abfd..c6d3f4bbcc 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -216,10 +216,10 @@ int mount_setup_early(void) { } int mount_cgroup_controllers(char ***join_controllers) { - int r; - char buf[LINE_MAX]; _cleanup_set_free_free_ Set *controllers = NULL; _cleanup_fclose_ FILE *f; + char buf[LINE_MAX]; + int r; /* Mount all available cgroup controllers that are built into the kernel. */ @@ -262,6 +262,7 @@ int mount_cgroup_controllers(char ***join_controllers) { } for (;;) { + _cleanup_free_ char *options = NULL, *controller = NULL, *where = NULL; MountPoint p = { .what = "cgroup", .type = "cgroup", @@ -269,7 +270,6 @@ int mount_cgroup_controllers(char ***join_controllers) { .mode = MNT_IN_CONTAINER, }; char ***k = NULL; - _cleanup_free_ char *options = NULL, *controller; controller = set_steal_first(controllers); if (!controller) @@ -286,7 +286,7 @@ int mount_cgroup_controllers(char ***join_controllers) { for (i = *k, j = *k; *i; i++) { if (!streq(*i, controller)) { - char _cleanup_free_ *t; + _cleanup_free_ char *t; t = set_remove(controllers, *i); if (!t) { @@ -308,7 +308,11 @@ int mount_cgroup_controllers(char ***join_controllers) { controller = NULL; } - p.where = strappenda("/sys/fs/cgroup/", options); + where = strappend("/sys/fs/cgroup/", options); + if (!where) + return log_oom(); + + p.where = where; p.options = options; r = mount_one(&p, true); @@ -319,7 +323,11 @@ int mount_cgroup_controllers(char ***join_controllers) { char **i; for (i = *k; *i; i++) { - char *t = strappenda("/sys/fs/cgroup/", *i); + _cleanup_free_ char *t = NULL; + + t = strappend("/sys/fs/cgroup/", *i); + if (!t) + return log_oom(); r = symlink(options, t); if (r < 0 && errno != EEXIST) { |