aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2022-11-14 14:20:09 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2022-11-21 20:51:18 +0000
commit906f88a5d67cab3e3a81b8d584f5abdaa15b2360 (patch)
tree3c5c1b959649749a1161ba0ff74898409de756f4 /sbin
parentbc92b6240ddf6ab11813abe439653308da14ee54 (diff)
downloadsrc-906f88a5d67cab3e3a81b8d584f5abdaa15b2360.tar.gz
src-906f88a5d67cab3e3a81b8d584f5abdaa15b2360.zip
dhclient(8): Verify lease-, renewal- and rebinding-time option sizes.
Else out-of-bound reads and undefined behaviour may happen. The current code only checked for the presence of the first of four bytes. Make sure the fields in question have the minium size required. No functional change intended. Reviewed by: rrs@ Sponsored by: NVIDIA Networking (cherry picked from commit 3492caf512ae090816b4ffa275be43b2f5cfc460)
Diffstat (limited to 'sbin')
-rw-r--r--sbin/dhclient/dhclient.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index 7ca9cfe8ab42..a8293fcd7cf5 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -764,7 +764,7 @@ dhcpack(struct packet *packet)
ACTION_SUPERSEDE)
ip->client->new->expiry = getULong(
ip->client->config->defaults[DHO_DHCP_LEASE_TIME].data);
- else if (ip->client->new->options[DHO_DHCP_LEASE_TIME].data)
+ else if (ip->client->new->options[DHO_DHCP_LEASE_TIME].len >= 4)
ip->client->new->expiry = getULong(
ip->client->new->options[DHO_DHCP_LEASE_TIME].data);
else
@@ -787,7 +787,7 @@ dhcpack(struct packet *packet)
ACTION_SUPERSEDE)
ip->client->new->renewal = getULong(
ip->client->config->defaults[DHO_DHCP_RENEWAL_TIME].data);
- else if (ip->client->new->options[DHO_DHCP_RENEWAL_TIME].len)
+ else if (ip->client->new->options[DHO_DHCP_RENEWAL_TIME].len >= 4)
ip->client->new->renewal = getULong(
ip->client->new->options[DHO_DHCP_RENEWAL_TIME].data);
else
@@ -801,7 +801,7 @@ dhcpack(struct packet *packet)
ACTION_SUPERSEDE)
ip->client->new->rebind = getULong(
ip->client->config->defaults[DHO_DHCP_REBINDING_TIME].data);
- else if (ip->client->new->options[DHO_DHCP_REBINDING_TIME].len)
+ else if (ip->client->new->options[DHO_DHCP_REBINDING_TIME].len >= 4)
ip->client->new->rebind = getULong(
ip->client->new->options[DHO_DHCP_REBINDING_TIME].data);
else