Commit fbbc1454 authored by Simon Kelley's avatar Simon Kelley

Fix off-by-one in DHCPv6 FQDN option decoding.

parent 5ef33279
...@@ -349,28 +349,28 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh ...@@ -349,28 +349,28 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh
if (len != 0 && len < 255) if (len != 0 && len < 255)
{ {
unsigned char *pp, *op = opt6_ptr(opt, 1); unsigned char *pp, *op = opt6_ptr(opt, 1);
char *pq = daemon->dhcp_buff; char *pq = daemon->dhcp_buff;
pp = op; pp = op;
while (*op != 0 && ((op + (*op) + 1) - pp) < len) while (*op != 0 && ((op + (*op)) - pp) < len)
{ {
memcpy(pq, op+1, *op); memcpy(pq, op+1, *op);
pq += *op; pq += *op;
op += (*op)+1; op += (*op)+1;
*(pq++) = '.'; *(pq++) = '.';
} }
if (pq != daemon->dhcp_buff) if (pq != daemon->dhcp_buff)
pq--; pq--;
*pq = 0; *pq = 0;
if (legal_hostname(daemon->dhcp_buff)) if (legal_hostname(daemon->dhcp_buff))
{ {
client_hostname = daemon->dhcp_buff; client_hostname = daemon->dhcp_buff;
if (option_bool(OPT_LOG_OPTS)) if (option_bool(OPT_LOG_OPTS))
my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), xid, client_hostname); my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), xid, client_hostname);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment