From: Roy Marples Date: Fri, 6 Dec 2013 19:56:04 +0000 (+0000) Subject: Fix some memory issues. X-Git-Tag: v6.2.0~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=900b6f94019a8a6b72206ff311081e6e9d10975c;p=thirdparty%2Fdhcpcd.git Fix some memory issues. --- 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++)