|
|
84b277 |
From aab1a9e316bfa55ab41ecad102c90c6b7eeac52e Mon Sep 17 00:00:00 2001
|
|
|
84b277 |
From: Lennart Poettering <lennart@poettering.net>
|
|
|
84b277 |
Date: Tue, 18 Mar 2014 04:06:36 +0100
|
|
|
84b277 |
Subject: [PATCH] cgroup: it's not OK to invoke alloca() in loops
|
|
|
84b277 |
|
|
|
84b277 |
(cherry-picked from a641dcd9bf05418d6a6c165e1c0cff615b4a0f47)
|
|
|
84b277 |
|
|
|
84b277 |
Resolves: #1147524
|
|
|
84b277 |
---
|
|
|
84b277 |
src/core/mount-setup.c | 20 ++++++++++++++------
|
|
|
84b277 |
1 file changed, 14 insertions(+), 6 deletions(-)
|
|
|
84b277 |
|
|
|
84b277 |
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
|
|
|
84b277 |
index 4359f59..679f289 100644
|
|
|
84b277 |
--- a/src/core/mount-setup.c
|
|
|
84b277 |
+++ b/src/core/mount-setup.c
|
|
|
84b277 |
@@ -210,10 +210,10 @@ int mount_setup_early(void) {
|
|
|
84b277 |
}
|
|
|
84b277 |
|
|
|
84b277 |
int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
- int r;
|
|
|
84b277 |
- char buf[LINE_MAX];
|
|
|
84b277 |
_cleanup_set_free_free_ Set *controllers = NULL;
|
|
|
84b277 |
_cleanup_fclose_ FILE *f;
|
|
|
84b277 |
+ char buf[LINE_MAX];
|
|
|
84b277 |
+ int r;
|
|
|
84b277 |
|
|
|
84b277 |
/* Mount all available cgroup controllers that are built into the kernel. */
|
|
|
84b277 |
|
|
|
84b277 |
@@ -256,6 +256,7 @@ int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
}
|
|
|
84b277 |
|
|
|
84b277 |
for (;;) {
|
|
|
84b277 |
+ _cleanup_free_ char *options = NULL, *controller = NULL, *where = NULL;
|
|
|
84b277 |
MountPoint p = {
|
|
|
84b277 |
.what = "cgroup",
|
|
|
84b277 |
.type = "cgroup",
|
|
|
84b277 |
@@ -263,7 +264,6 @@ int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
.mode = MNT_IN_CONTAINER,
|
|
|
84b277 |
};
|
|
|
84b277 |
char ***k = NULL;
|
|
|
84b277 |
- _cleanup_free_ char *options = NULL, *controller;
|
|
|
84b277 |
|
|
|
84b277 |
controller = set_steal_first(controllers);
|
|
|
84b277 |
if (!controller)
|
|
|
84b277 |
@@ -280,7 +280,7 @@ int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
for (i = *k, j = *k; *i; i++) {
|
|
|
84b277 |
|
|
|
84b277 |
if (!streq(*i, controller)) {
|
|
|
84b277 |
- char _cleanup_free_ *t;
|
|
|
84b277 |
+ _cleanup_free_ char *t;
|
|
|
84b277 |
|
|
|
84b277 |
t = set_remove(controllers, *i);
|
|
|
84b277 |
if (!t) {
|
|
|
84b277 |
@@ -302,7 +302,11 @@ int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
controller = NULL;
|
|
|
84b277 |
}
|
|
|
84b277 |
|
|
|
84b277 |
- p.where = strappenda("/sys/fs/cgroup/", options);
|
|
|
84b277 |
+ where = strappend("/sys/fs/cgroup/", options);
|
|
|
84b277 |
+ if (!where)
|
|
|
84b277 |
+ return log_oom();
|
|
|
84b277 |
+
|
|
|
84b277 |
+ p.where = where;
|
|
|
84b277 |
p.options = options;
|
|
|
84b277 |
|
|
|
84b277 |
r = mount_one(&p, true);
|
|
|
84b277 |
@@ -313,7 +317,11 @@ int mount_cgroup_controllers(char ***join_controllers) {
|
|
|
84b277 |
char **i;
|
|
|
84b277 |
|
|
|
84b277 |
for (i = *k; *i; i++) {
|
|
|
84b277 |
- char *t = strappenda("/sys/fs/cgroup/", *i);
|
|
|
84b277 |
+ _cleanup_free_ char *t = NULL;
|
|
|
84b277 |
+
|
|
|
84b277 |
+ t = strappend("/sys/fs/cgroup/", *i);
|
|
|
84b277 |
+ if (!t)
|
|
|
84b277 |
+ return log_oom();
|
|
|
84b277 |
|
|
|
84b277 |
r = symlink(options, t);
|
|
|
84b277 |
if (r < 0 && errno != EEXIST) {
|