]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Ensure mask and bcast as always set.
authorRoy Marples <roy@marples.name>
Wed, 25 May 2016 13:50:05 +0000 (13:50 +0000)
committerRoy Marples <roy@marples.name>
Wed, 25 May 2016 13:50:05 +0000 (13:50 +0000)
if-bsd.c

index d1b21955abffd7da1a80c713f8fdc42daca8caaf..1628a1219b637ac9d11e88456c37a818f0aa0d7b 100644 (file)
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -1377,12 +1377,19 @@ if_ifa(struct dhcpcd_ctx *ctx, const struct ifa_msghdr *ifam)
        case AF_INET:
        case 255: /* FIXME: Why 255? */
        {
+               const struct sockaddr_in *sin;
                struct in_addr addr, mask, bcast;
                int flags;
 
-               COPYOUT(addr, rti_info[RTAX_IFA]);
-               COPYOUT(mask, rti_info[RTAX_NETMASK]);
-               COPYOUT(bcast, rti_info[RTAX_BRD]);
+               sin = (const void *)rti_info[RTAX_IFA];
+               addr.s_addr = sin != NULL && sin->sin_family == AF_INET ?
+                   sin->sin_addr.s_addr : INADDR_ANY;
+               sin = (const void *)rti_info[RTAX_NETMASK];
+               mask.s_addr = sin != NULL && sin->sin_family == AF_INET ?
+                   sin->sin_addr.s_addr : INADDR_ANY;
+               sin = (const void *)rti_info[RTAX_BRD];
+               bcast.s_addr = sin != NULL && sin->sin_family == AF_INET ?
+                   sin->sin_addr.s_addr : INADDR_ANY;
                if (ifam->ifam_type == RTM_NEWADDR) {
                        if ((flags = if_addrflags(&addr, ifp)) == -1)
                                break;