X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=src%2Fdhcpv6.c;h=8d65219eb8d4ccfe073ab214750aef49f9f9380a;hb=163c4ef809bae670524df2d55e24635dd78bfd34;hp=75bc50e84e89f641f0b6f450650f86c60f1b83b3;hpb=26c5d8724355b29694af684ee29b47e52129a33c;p=odhcp6c.git diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 75bc50e..8d65219 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -569,11 +569,7 @@ static bool dhcpv6_response_is_valid(const void *buf, ssize_t len, void *server_id = odhcp6c_get_state(STATE_SERVER_ID, &server_id_len); dhcpv6_for_each_option(&rep[1], end, otype, olen, odata) { - if ((odata + olen) > end) { - options_valid = false; - break; - } - else if (otype == DHCPV6_OPT_CLIENTID) { + if (otype == DHCPV6_OPT_CLIENTID) { clientid_ok = (olen + 4U == client_id_len) && !memcmp( &odata[-4], client_id, client_id_len); } else if (otype == DHCPV6_OPT_SERVERID) { @@ -627,7 +623,7 @@ static bool dhcpv6_response_is_valid(const void *buf, ssize_t len, } } - if (!options_valid) + if (!options_valid || ((odata + olen) > end)) return false; if (type == DHCPV6_MSG_INFO_REQ && ia_present)