From a641dcd9bf05418d6a6c165e1c0cff615b4a0f47 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 18 Mar 2014 04:06:36 +0100 Subject: [PATCH] cgroup: it's not OK to invoke alloca() in loops --- src/core/mount-setup.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git src/core/mount-setup.c src/core/mount-setup.c index 387030a..c6d3f4b 100644 --- src/core/mount-setup.c +++ 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) { -- 1.7.9.2