Commit bf83c5b9 by Michael Santos Committed by Daniel Lezcano

confile: check allocation succeeds

parent 95642a10
...@@ -195,7 +195,7 @@ static struct lxc_netdev *network_netdev(const char *key, const char *value, ...@@ -195,7 +195,7 @@ static struct lxc_netdev *network_netdev(const char *key, const char *value,
static int network_ifname(char **valuep, char *value) static int network_ifname(char **valuep, char *value)
{ {
if (strlen(value) > IFNAMSIZ) { if (strlen(value) >= IFNAMSIZ) {
ERROR("invalid interface name: %s", value); ERROR("invalid interface name: %s", value);
return -1; return -1;
} }
...@@ -553,8 +553,8 @@ static int config_cgroup(const char *key, char *value, struct lxc_conf *lxc_conf ...@@ -553,8 +553,8 @@ static int config_cgroup(const char *key, char *value, struct lxc_conf *lxc_conf
{ {
char *token = "lxc.cgroup."; char *token = "lxc.cgroup.";
char *subkey; char *subkey;
struct lxc_list *cglist; struct lxc_list *cglist = NULL;
struct lxc_cgroup *cgelem; struct lxc_cgroup *cgelem = NULL;
subkey = strstr(key, token); subkey = strstr(key, token);
...@@ -571,21 +571,40 @@ static int config_cgroup(const char *key, char *value, struct lxc_conf *lxc_conf ...@@ -571,21 +571,40 @@ static int config_cgroup(const char *key, char *value, struct lxc_conf *lxc_conf
cglist = malloc(sizeof(*cglist)); cglist = malloc(sizeof(*cglist));
if (!cglist) if (!cglist)
return -1; goto out;
cgelem = malloc(sizeof(*cgelem)); cgelem = malloc(sizeof(*cgelem));
if (!cgelem) { if (!cgelem)
free(cglist); goto out;
return -1; memset(cgelem, 0, sizeof(*cgelem));
}
cgelem->subsystem = strdup(subkey); cgelem->subsystem = strdup(subkey);
cgelem->value = strdup(value); cgelem->value = strdup(value);
if (!cgelem->subsystem || !cgelem->value)
goto out;
cglist->elem = cgelem; cglist->elem = cgelem;
lxc_list_add_tail(&lxc_conf->cgroup, cglist); lxc_list_add_tail(&lxc_conf->cgroup, cglist);
return 0; return 0;
out:
if (cglist)
free(cglist);
if (cgelem) {
if (cgelem->subsystem)
free(cgelem->subsystem);
if (cgelem->value)
free(cgelem->value);
free(cgelem);
}
return -1;
} }
static int config_fstab(const char *key, char *value, struct lxc_conf *lxc_conf) static int config_fstab(const char *key, char *value, struct lxc_conf *lxc_conf)
...@@ -631,6 +650,8 @@ static int config_mount(const char *key, char *value, struct lxc_conf *lxc_conf) ...@@ -631,6 +650,8 @@ static int config_mount(const char *key, char *value, struct lxc_conf *lxc_conf)
return -1; return -1;
mntelem = strdup(value); mntelem = strdup(value);
if (!mntelem)
return -1;
mntlist->elem = mntelem; mntlist->elem = mntelem;
lxc_list_add_tail(&lxc_conf->mount_list, mntlist); lxc_list_add_tail(&lxc_conf->mount_list, mntlist);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment