X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fdhcpv6.c;h=28fad507b4a4fa39e541c01f1e6091bed255f491;hp=93433d4d59ce5e4b945fec9904e6d4d3feba5057;hb=770741e98f2569ec0b00251ba9bf17a92e89221e;hpb=673d079b108815d5eff0547910d3d48189c0a114 diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 93433d4..28fad50 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -614,20 +614,24 @@ static int dhcpv6_handle_reply(_unused enum dhcpv6_msg orig, dhcpv6_for_each_option(ia_pd, ia_pd + ia_pd_len, otype, olen, odata) { struct dhcpv6_ia_prefix *p = (void*)&odata[-4]; uint32_t valid = ntohl(p->valid); - p->valid = (valid < elapsed) ? 0 : htonl(valid - elapsed); + if (valid != UINT32_MAX) + p->valid = (valid < elapsed) ? 0 : htonl(valid - elapsed); uint32_t pref = ntohl(p->preferred); - p->preferred = (pref < elapsed) ? 0 : htonl(pref - elapsed); + if (pref != UINT32_MAX) + p->preferred = (pref < elapsed) ? 0 : htonl(pref - elapsed); } // Decrease valid and preferred lifetime of addresses dhcpv6_for_each_option(ia_na, ia_na + ia_na_len, otype, olen, odata) { struct dhcpv6_ia_addr *p = (void*)&odata[-4]; uint32_t valid = ntohl(p->valid); - p->valid = (valid < elapsed) ? 0 : htonl(valid - elapsed); + if (valid != UINT32_MAX) + p->valid = (valid < elapsed) ? 0 : htonl(valid - elapsed); uint32_t pref = ntohl(p->preferred); - p->preferred = (pref < elapsed) ? 0 : htonl(pref - elapsed); + if (pref != UINT32_MAX) + p->preferred = (pref < elapsed) ? 0 : htonl(pref - elapsed); } // Parse and find all matching IAs