From: Roy Marples Date: Mon, 5 Sep 2016 20:08:46 +0000 (+0000) Subject: Don't violate memory when we learn new IPv4LL addresses. X-Git-Tag: v6.11.4~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1fa020896cff90b6be3e06637d040915089f4cc;p=thirdparty%2Fdhcpcd.git Don't violate memory when we learn new IPv4LL addresses. --- diff --git a/ipv4.c b/ipv4.c index dbe04899..84504d40 100644 --- a/ipv4.c +++ b/ipv4.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -1263,6 +1264,7 @@ ipv4_handleifa(struct dhcpcd_ctx *ctx, struct ipv4_state *state; struct ipv4_addr *ia; int flags; + bool ia_is_new; if (ifs == NULL) ifs = ctx->ifaces; @@ -1287,14 +1289,18 @@ ipv4_handleifa(struct dhcpcd_ctx *ctx, } ia->iface = ifp; ia->addr = *addr; + ia->mask = *mask; + ia_is_new = true; #ifdef ALIAS_ADDR strlcpy(ia->alias, ifname, sizeof(ia->alias)); #endif TAILQ_INSERT_TAIL(&state->addrs, ia, next); - } + } else + ia_is_new = false; /* Mask could have changed */ - if (mask->s_addr != INADDR_ANY && - mask->s_addr != ia->mask.s_addr) + if (ia_is_new || + (mask->s_addr != INADDR_ANY && + mask->s_addr != ia->mask.s_addr)) { ia->mask = *mask; snprintf(ia->saddr, sizeof(ia->saddr), "%s/%d",