From f01d035800ee04f607fe63f52ee8b1aea7a1b908 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Tue, 5 Feb 2019 07:12:17 +0100 Subject: [PATCH] confile: remove stack allocations Signed-off-by: Christian Brauner --- src/lxc/confile.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 564cbe38a0..cecb65548e 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -53,6 +53,7 @@ #include "../include/netns_ifaddrs.h" #include "log.h" #include "lxcseccomp.h" +#include "memory_utils.h" #include "network.h" #include "parse.h" #include "storage.h" @@ -2710,12 +2711,12 @@ int write_config(int fd, const struct lxc_conf *conf) bool do_append_unexp_config_line(struct lxc_conf *conf, const char *key, const char *v) { + __do_free char *tmp; int ret; size_t len; - char *tmp; len = strlen(key) + strlen(v) + 4; - tmp = alloca(len); + tmp = must_realloc(NULL, len); if (lxc_config_value_empty(v)) ret = snprintf(tmp, len, "%s =", key); @@ -2777,21 +2778,23 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath, const char *newpath, const char *oldname, const char *newname, const char *ovldir) { + __do_free char *newdir = NULL, + *olddir = NULL; int ret; - char *lend, *newdir, *olddir, *p, *q; + char *lend, *p, *q; size_t newdirlen, olddirlen; char *lstart = conf->unexpanded_config; const char *key = "lxc.mount.entry"; olddirlen = strlen(ovldir) + strlen(oldpath) + strlen(oldname) + 2; - olddir = alloca(olddirlen + 1); + olddir = must_realloc(NULL, olddirlen + 1); ret = snprintf(olddir, olddirlen + 1, "%s=%s/%s", ovldir, oldpath, oldname); if (ret < 0 || ret >= olddirlen + 1) return false; newdirlen = strlen(ovldir) + strlen(newpath) + strlen(newname) + 2; - newdir = alloca(newdirlen + 1); + newdir = must_realloc(NULL, newdirlen + 1); ret = snprintf(newdir, newdirlen + 1, "%s=%s/%s", ovldir, newpath, newname); if (ret < 0 || ret >= newdirlen + 1) @@ -2885,20 +2888,22 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath, const char *newpath, const char *oldname, const char *newname) { + __do_free char *newdir = NULL, + *olddir = NULL; int ret; - char *lend, *newdir, *olddir, *p; + char *lend, *p; char *lstart = conf->unexpanded_config; size_t newdirlen, olddirlen; const char *key = "lxc.hook"; olddirlen = strlen(oldpath) + strlen(oldname) + 1; - olddir = alloca(olddirlen + 1); + olddir = must_realloc(NULL, olddirlen + 1); ret = snprintf(olddir, olddirlen + 1, "%s/%s", oldpath, oldname); if (ret < 0 || ret >= olddirlen + 1) return false; newdirlen = strlen(newpath) + strlen(newname) + 1; - newdir = alloca(newdirlen + 1); + newdir = must_realloc(NULL, newdirlen + 1); ret = snprintf(newdir, newdirlen + 1, "%s/%s", newpath, newname); if (ret < 0 || ret >= newdirlen + 1) return false;