summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/dhclient/dhclient.c7
-rw-r--r--sbin/dhclient/dispatch.c8
-rw-r--r--sbin/dhclient/kroute.c4
-rw-r--r--sbin/dhclient/packet.c6
4 files changed, 15 insertions, 10 deletions
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index 8033caa7b21..5170f5a3a69 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhclient.c,v 1.269 2013/12/04 16:54:28 krw Exp $ */
+/* $OpenBSD: dhclient.c,v 1.270 2013/12/04 19:39:50 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -930,7 +930,7 @@ state_bound(void)
if (client->active->options[DHO_DHCP_SERVER_IDENTIFIER].len == 4) {
memcpy(&client->destination.s_addr,
client->active->options[DHO_DHCP_SERVER_IDENTIFIER].data,
- client->active->options[DHO_DHCP_SERVER_IDENTIFIER].len);
+ sizeof(client->destination.s_addr));
} else
client->destination.s_addr = INADDR_BROADCAST;
@@ -2448,6 +2448,9 @@ void add_classless_static_routes(int rdomain,
while (i < classless_static_routes->len) {
bits = classless_static_routes->data[i];
bytes = (bits + 7) / 8;
+ if (bytes > 4)
+ continue;
+
i++;
memset(&netmask, 0, sizeof(netmask));
diff --git a/sbin/dhclient/dispatch.c b/sbin/dhclient/dispatch.c
index 0221edfb5d7..2516301d0bb 100644
--- a/sbin/dhclient/dispatch.c
+++ b/sbin/dhclient/dispatch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dispatch.c,v 1.83 2013/11/16 19:34:43 krw Exp $ */
+/* $OpenBSD: dispatch.c,v 1.84 2013/12/04 19:39:50 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -403,8 +403,10 @@ subnet_exists(struct client_lease *l)
int myrdomain, hisrdomain;
memset(&mymask, 0, sizeof(mymask));
- memcpy(&mymask.s_addr, l->options[DHO_SUBNET_MASK].data,
- l->options[DHO_SUBNET_MASK].len);
+ if (l->options[DHO_SUBNET_MASK].len == sizeof(mymask.s_addr)) {
+ memcpy(&mymask.s_addr, l->options[DHO_SUBNET_MASK].data,
+ sizeof(mymask.s_addr));
+ }
myaddr.s_addr = l->address.s_addr;
mynet.s_addr = mymask.s_addr & myaddr.s_addr;
diff --git a/sbin/dhclient/kroute.c b/sbin/dhclient/kroute.c
index f0da325155b..1451ce57cb6 100644
--- a/sbin/dhclient/kroute.c
+++ b/sbin/dhclient/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.56 2013/08/17 14:50:05 krw Exp $ */
+/* $OpenBSD: kroute.c,v 1.57 2013/12/04 19:39:50 krw Exp $ */
/*
* Copyright 2012 Kenneth R Westerback <krw@openbsd.org>
@@ -441,7 +441,7 @@ priv_add_address(struct imsg_add_address *imsg)
in = (struct sockaddr_in *)&ifaliasreq.ifra_mask;
in->sin_family = AF_INET;
in->sin_len = sizeof(ifaliasreq.ifra_mask);
- memcpy(&in->sin_addr.s_addr, &imsg->mask, sizeof(imsg->mask));
+ memcpy(&in->sin_addr.s_addr, &imsg->mask, sizeof(in->sin_addr.s_addr));
/* No need to set broadcast address. Kernel can figure it out. */
diff --git a/sbin/dhclient/packet.c b/sbin/dhclient/packet.c
index cae5529f544..915863cb4c0 100644
--- a/sbin/dhclient/packet.c
+++ b/sbin/dhclient/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.18 2013/05/02 16:35:27 krw Exp $ */
+/* $OpenBSD: packet.c,v 1.19 2013/12/04 19:39:50 krw Exp $ */
/* Packet assembly code, originally contributed by Archie Cobbs. */
@@ -195,7 +195,7 @@ decode_udp_ip_header(unsigned char *buf, int bufix, struct sockaddr_in *from,
ntohs(ip->ip_len), buflen);
#endif
- memcpy(&from->sin_addr, &ip->ip_src, 4);
+ memcpy(&from->sin_addr, &ip->ip_src, sizeof(from->sin_addr));
/*
* Compute UDP checksums, including the ``pseudo-header'', the
@@ -243,7 +243,7 @@ decode_udp_ip_header(unsigned char *buf, int bufix, struct sockaddr_in *from,
return (-1);
}
- memcpy(&from->sin_port, &udp->uh_sport, sizeof(udp->uh_sport));
+ memcpy(&from->sin_port, &udp->uh_sport, sizeof(from->sin_port));
return (ip_len + sizeof(*udp));
}