]> 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:13:09 +0000 (16:13 +0000)
Addition to #157.

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

index 29ae486b02c6f2d8b12dbdb00cbeb419057b1b5f..ee570d7d3b7263aaac76b6e4a7b0a809f5489a0d 100644 (file)
@@ -1105,7 +1105,7 @@ out:
                if_free(ifp);
        }
        free(ifs);
-       if_freeifaddrs(&ifaddrs);
+       if_freeifaddrs(ctx, &ifaddrs);
 
        return e;
 }
@@ -1245,7 +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);
+       if_freeifaddrs(ctx, &ifaddrs);
 }
 
 void
@@ -2541,7 +2541,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)
@@ -2613,14 +2613,7 @@ 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);
 #ifdef PRIVSEP
        ps_stop(&ctx);
 #endif
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 5d11015d743f4f345cabbb9df3a266e17c878fe3..0761e793c2c04f313992177ac4d5aa1650b8f3ed 100644 (file)
--- a/src/if.h
+++ b/src/if.h
@@ -170,7 +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_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 *);