switch: fix some memory leaks in switch_parse_vlan()
[openwrt/svn-archive/archive.git] / package / switch / src / switch-core.c
index f5b248aadbb2b60bbc15e06a38c7c9c7ba847458..79b4e93f03ca99e3a8b3f9ddeb4dffb8163c8481 100644 (file)
@@ -341,10 +341,9 @@ switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf)
        switch_vlan_config *c;
        int j, u, p, s;
 
-       c = kmalloc(sizeof(switch_vlan_config), GFP_KERNEL);
+       c = kzalloc(sizeof(switch_vlan_config), GFP_KERNEL);
        if (!c)
                return NULL;
-       memset(c, 0, sizeof(switch_vlan_config));
 
        while (isspace(*buf)) buf++;
        j = 0;
@@ -382,7 +381,10 @@ switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf)
 
                while (isspace(*buf)) buf++;
        }
-       if (*buf != 0) return NULL;
+       if (*buf != 0) {
+               kfree(c);
+               return NULL;
+       }
 
        c->port &= (1 << driver->ports) - 1;
        c->untag &= (1 << driver->ports) - 1;