From: Roy Marples Date: Fri, 23 Dec 2022 13:54:22 +0000 (+0000) Subject: if: Add if_freeifaddrs so we can free ifaddrs on all code paths X-Git-Tag: v10.0.0~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d62bc8bee558c72530acaec2f8a0bf146c58de1;p=thirdparty%2Fdhcpcd.git if: Add if_freeifaddrs so we can free ifaddrs on all code paths Fixes #157. --- diff --git a/src/dhcpcd.c b/src/dhcpcd.c index ccfb9894..29ae486b 100644 --- a/src/dhcpcd.c +++ b/src/dhcpcd.c @@ -1105,6 +1105,7 @@ out: if_free(ifp); } free(ifs); + if_freeifaddrs(&ifaddrs); return e; } @@ -1244,6 +1245,7 @@ dhcpcd_linkoverflow(struct dhcpcd_ctx *ctx) if_markaddrsstale(ctx->ifaces); if_learnaddrs(ctx, ctx->ifaces, &ifaddrs); if_deletestaleaddrs(ctx->ifaces); + if_freeifaddrs(&ifaddrs); } void @@ -2539,6 +2541,8 @@ start_manager: dhcpcd_initstate1(ifp, argc, argv, 0); } if_learnaddrs(&ctx, ctx.ifaces, &ifaddrs); + if_freeifaddrs(&ifaddrs); + ifaddrs = NULL; if (ctx.options & DHCPCD_BACKGROUND) dhcpcd_daemonise(&ctx); diff --git a/src/if.c b/src/if.c index b00f5e6f..862fc73e 100644 --- a/src/if.c +++ b/src/if.c @@ -356,6 +356,13 @@ if_learnaddrs(struct dhcpcd_ctx *ctx, struct if_head *ifs, #endif } } +} + +void if_freeifaddrs(struct ifaddrs **ifaddrs) +{ + + if (ifaddrs == NULL) + return; #ifdef PRIVSEP_GETIFADDRS if (IN_PRIVSEP(ctx)) @@ -363,7 +370,6 @@ if_learnaddrs(struct dhcpcd_ctx *ctx, struct if_head *ifs, else #endif freeifaddrs(*ifaddrs); - *ifaddrs = NULL; } void diff --git a/src/if.h b/src/if.h index ac5c5721..5d11015d 100644 --- a/src/if.h +++ b/src/if.h @@ -170,6 +170,7 @@ bool if_is_link_up(const struct interface *); bool if_valid_hwaddr(const uint8_t *, size_t); struct if_head *if_discover(struct dhcpcd_ctx *, struct ifaddrs **, int, char * const *); +void if_freeifaddrs(struct ifaddrs **); void if_markaddrsstale(struct if_head *); void if_learnaddrs(struct dhcpcd_ctx *, struct if_head *, struct ifaddrs **); void if_deletestaleaddrs(struct if_head *);