changeset 2196:daa4ed46377e draft

Fix some memory issues.
author Roy Marples <roy@marples.name>
date Fri, 06 Dec 2013 19:56:04 +0000
parents 97118e44508a
children 0599335f7a36
files if-options.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/if-options.c	Fri Dec 06 19:15:06 2013 +0000
+++ b/if-options.c	Fri Dec 06 19:56:04 2013 +0000
@@ -1471,7 +1471,8 @@
 			s = 0;
 			np = NULL;
 		}
-		vivco = realloc(ifo->vivco, ifo->vivco_len + 1);
+		vivco = realloc(ifo->vivco, sizeof(*ifo->vivco) *
+		    (ifo->vivco_len + 1));
 		if (vivco == NULL) {
 			syslog(LOG_ERR, "%s: %m", __func__);
 			return -1;
@@ -1760,6 +1761,7 @@
 {
 	size_t i;
 	struct dhcp_opt *opt;
+	struct vivco *vo;
 
 	if (ifo) {
 		if (ifo->environ) {
@@ -1789,11 +1791,16 @@
 		    i++, opt++)
 			free_dhcp_opt_embenc(opt);
 		free(ifo->dhcp6_override);
+		for (i = 0, vo = ifo->vivco;
+		    i < ifo->vivco_len;
+		    i++, vo++)
+			free(vo->data);
+		free(ifo->vivco);
 		for (i = 0, opt = ifo->vivso_override;
 		    i < ifo->vivso_override_len;
 		    i++, opt++)
 			free_dhcp_opt_embenc(opt);
-		free(ifo->dhcp6_override);
+		free(ifo->vivso_override);
 
 #ifdef INET6
 		for (i = 0; i < ifo->ia_len; i++)