From: Roy Marples Date: Fri, 23 Dec 2022 16:13:09 +0000 (+0000) Subject: if: Fix issue with prior with privsep enabled X-Git-Tag: v9.5.0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b6b6280fbd48b479cbb965d37357ce7f53b877c;p=thirdparty%2Fdhcpcd.git if: Fix issue with prior with privsep enabled Addition to #157. --- diff --git a/src/dhcpcd.c b/src/dhcpcd.c index e9ee2436..838befb6 100644 --- a/src/dhcpcd.c +++ b/src/dhcpcd.c @@ -1105,7 +1105,7 @@ out: if_free(ifp); } free(ifs); - if_freeifaddrs(&ifaddrs); + if_freeifaddrs(ctx, &ifaddrs); return e; } @@ -1242,7 +1242,7 @@ dhcpcd_linkoverflow(struct dhcpcd_ctx *ctx) if_markaddrsstale(ctx->ifaces); if_learnaddrs(ctx, ctx->ifaces, &ifaddrs); if_deletestaleaddrs(ctx->ifaces); - if_freeifaddrs(&ifaddrs); + if_freeifaddrs(ctx, &ifaddrs); } void @@ -2500,7 +2500,7 @@ start_manager: dhcpcd_initstate1(ifp, argc, argv, 0); } if_learnaddrs(&ctx, ctx.ifaces, &ifaddrs); - if_freeifaddrs(&ifaddrs); + if_freeifaddrs(&ctx, &ifaddrs); ifaddrs = NULL; if (ctx.options & DHCPCD_BACKGROUND) @@ -2572,14 +2572,9 @@ exit_failure: exit1: if (!(ctx.options & DHCPCD_TEST) && control_stop(&ctx) == -1) logerr("%s: control_stop", __func__); - if (ifaddrs != NULL) { -#ifdef PRIVSEP_GETIFADDRS - if (IN_PRIVSEP(&ctx)) - free(ifaddrs); - else -#endif - freeifaddrs(ifaddrs); - } + + if_freeifaddrs(&ctx, &ifaddrs); + /* ps_stop will clear DHCPCD_PRIVSEP but we need to * remember it to avoid attemping to remove the pidfile */ oi = ctx.options & DHCPCD_PRIVSEP ? 1 : 0; diff --git a/src/if.c b/src/if.c index 862fc73e..6c4f9f5a 100644 --- a/src/if.c +++ b/src/if.c @@ -358,8 +358,11 @@ if_learnaddrs(struct dhcpcd_ctx *ctx, struct if_head *ifs, } } -void if_freeifaddrs(struct ifaddrs **ifaddrs) +void if_freeifaddrs(struct dhcpcd_ctx *ctx, struct ifaddrs **ifaddrs) { +#ifndef PRIVSEP_GETIFADDRS + _UNUSED(ctx); +#endif if (ifaddrs == NULL) return; diff --git a/src/if.h b/src/if.h index e986de06..01a8f26f 100644 --- a/src/if.h +++ b/src/if.h @@ -142,7 +142,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_freeifaddrs(struct dhcpcd_ctx *ctx, 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 *);