Signed-off-by: Michael Santos <michael.san...@gmail.com>
---
 src/lxc/confile.c |   37 +++++++++++++++++++++++++++++--------
 1 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/lxc/confile.c b/src/lxc/confile.c
index 1d30cba..791f04f 100644
--- a/src/lxc/confile.c
+++ b/src/lxc/confile.c
@@ -195,7 +195,7 @@ static struct lxc_netdev *network_netdev(const char *key, 
const char *value,
 
 static int network_ifname(char **valuep, char *value)
 {
-       if (strlen(value) > IFNAMSIZ) {
+       if (strlen(value) >= IFNAMSIZ) {
                ERROR("invalid interface name: %s", value);
                return -1;
        }
@@ -553,8 +553,8 @@ static int config_cgroup(const char *key, char *value, 
struct lxc_conf *lxc_conf
 {
        char *token = "lxc.cgroup.";
        char *subkey;
-       struct lxc_list *cglist;
-       struct lxc_cgroup *cgelem;
+       struct lxc_list *cglist = NULL;
+       struct lxc_cgroup *cgelem = NULL;
 
        subkey = strstr(key, token);
 
@@ -571,21 +571,40 @@ static int config_cgroup(const char *key, char *value, 
struct lxc_conf *lxc_conf
 
        cglist = malloc(sizeof(*cglist));
        if (!cglist)
-               return -1;
+               goto out;
 
        cgelem = malloc(sizeof(*cgelem));
-       if (!cgelem) {
-               free(cglist);
-               return -1;
-       }
+       if (!cgelem)
+               goto out;
+       memset(cgelem, 0, sizeof(*cgelem));
 
        cgelem->subsystem = strdup(subkey);
        cgelem->value = strdup(value);
+
+       if (!cgelem->subsystem || !cgelem->value)
+               goto out;
+
        cglist->elem = cgelem;
 
        lxc_list_add_tail(&lxc_conf->cgroup, cglist);
 
        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)
@@ -631,6 +650,8 @@ static int config_mount(const char *key, char *value, 
struct lxc_conf *lxc_conf)
                return -1;
 
        mntelem = strdup(value);
+       if (!mntelem)
+               return -1;
        mntlist->elem = mntelem;
 
        lxc_list_add_tail(&lxc_conf->mount_list, mntlist);
-- 
1.7.0.4


------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to