]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
if: Fix issue with prior with privsep enabled
authorRoy Marples <roy@marples.name>
Fri, 23 Dec 2022 16:13:09 +0000 (16:13 +0000)
committerRoy Marples <roy@marples.name>
Fri, 23 Dec 2022 16:23:36 +0000 (16:23 +0000)
Addition to #157.

src/dhcpcd.c
src/if.c
src/if.h

index e9ee243673f800d57a1189f26e5f4a2b2b4e10a1..838befb63ac3826a4c705cff013856c6646053b1 100644 (file)
@@ -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;
index 862fc73eb72fafce800470faab9507ac1d63a42a..6c4f9f5ad50feb9bc5e69a38ccd7840b2cbfd1bb 100644 (file)
--- 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;
index e986de06068f28879a2c8feb14d67af29355e7d0..01a8f26fdf32248744c066d46bf707a0884874e1 100644 (file)
--- 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 *);