From 900b6f94019a8a6b72206ff311081e6e9d10975c Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Fri, 6 Dec 2013 19:56:04 +0000 Subject: [PATCH] Fix some memory issues. --- if-options.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/if-options.c b/if-options.c index fc468ddf..aac0ff40 100644 --- a/if-options.c +++ b/if-options.c @@ -1471,7 +1471,8 @@ parse_option(struct if_options *ifo, int opt, const char *arg) 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 @@ free_options(struct if_options *ifo) { size_t i; struct dhcp_opt *opt; + struct vivco *vo; if (ifo) { if (ifo->environ) { @@ -1789,11 +1791,16 @@ free_options(struct if_options *ifo) 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++) -- 2.47.3