]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Fix a segfault.
authorRoy Marples <roy@marples.name>
Thu, 2 Oct 2014 15:20:07 +0000 (15:20 +0000)
committerRoy Marples <roy@marples.name>
Thu, 2 Oct 2014 15:20:07 +0000 (15:20 +0000)
dhcp6.c

diff --git a/dhcp6.c b/dhcp6.c
index 83b97402c3a477e2abb0f7e9e50be15e99326b6e..9adbec2126a80782e4020cf9eeea42bdedd791c4 100644 (file)
--- a/dhcp6.c
+++ b/dhcp6.c
@@ -1189,7 +1189,7 @@ dhcp6_dadcallback(void *arg)
        struct ipv6_addr *ap = arg;
        struct interface *ifp;
        struct dhcp6_state *state;
-       int wascompleted;
+       int wascompleted, valid;
 
        wascompleted = (ap->flags & IPV6_AF_DADCOMPLETED);
        ap->flags |= IPV6_AF_DADCOMPLETED;
@@ -1205,6 +1205,7 @@ dhcp6_dadcallback(void *arg)
                if (state->state == DH6S_BOUND ||
                    state->state == DH6S_DELEGATED)
                {
+                       valid = (ap->delegating_iface == NULL);
                        TAILQ_FOREACH(ap, &state->addrs, next) {
                                if (ap->flags & IPV6_AF_ADDED &&
                                    !(ap->flags & IPV6_AF_DADCOMPLETED))
@@ -1217,7 +1218,7 @@ dhcp6_dadcallback(void *arg)
                                syslog(LOG_DEBUG, "%s: DHCPv6 DAD completed",
                                    ifp->name);
                                script_runreason(ifp, state->reason);
-                               if (ap->delegating_iface == NULL)
+                               if (valid)
                                        dhcpcd_daemonise(ifp->ctx);
                        }
                }