summaryrefslogtreecommitdiffstats
path: root/if-bsd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2016-05-25 13:50:05 +0000
committerRoy Marples <roy@marples.name>2016-05-25 13:50:05 +0000
commit7f347e48b61c5dec851c04c37079902822ba8bcd (patch)
treeff0b7072dc34bcea2622fd860e44025e9af30c98 /if-bsd.c
parentff8e6026ec52cca0d52c59088caf004561ad5554 (diff)
downloaddhcpcd-7f347e48b61c5dec851c04c37079902822ba8bcd.tar.xz
Ensure mask and bcast as always set.
Diffstat (limited to 'if-bsd.c')
-rw-r--r--if-bsd.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/if-bsd.c b/if-bsd.c
index d1b21955..1628a121 100644
--- 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;