Commit 251bb4b9 authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[master] Fixed crash in dhclient when de-preferencing a lease

    Merges in rt44373.
parent 8c785e79
......@@ -144,7 +144,7 @@ by Eric Young (eay@cryptsoft.com).
freebsd, linux, macos, netbsd, openbsd.
[ISC-Bugs #36169]
- Modified DDNS support initialization such DNS related ports will only be
- Modified DDNS support initialization such that DNS related ports will only be
opened by the server (dhcpd) at startup if ddns-update-style is not "none";
by dhclient only if and when the it first attempts an update; and never by
dhcrelay. Prior to this all three always did the initialization at startup
......@@ -157,6 +157,12 @@ by Eric Young (eay@cryptsoft.com).
Parker (wp02855 at gmail dot com) for reporting the issue.
[ISC-Bugs #41185]
- Corrected a dhclient -6 issue that caused the client to crash with an
"Impossible condition" error after de-preferencing its only IA binding.
The crash occurred when server configuration changes rendered the existing
binding out-of-range and no other leases were available to offer.
[ISC-Bugs #44373]
Changes since 4.3.0 (bug fixes)
- Tidy up several small tickets.
......
/* dhc6.c - DHCPv6 client routines. */
/*
* Copyright (c) 2012-2016 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2012-2017 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2006-2010 by Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and distribute this software for any
......@@ -4364,6 +4364,7 @@ dhc6_check_times(struct client_state *client)
TIME renew=MAX_TIME, rebind=MAX_TIME, depref=MAX_TIME,
lo_expire=MAX_TIME, hi_expire=0, max_ia_starts = 0, tmp;
int has_addrs = ISC_FALSE;
int has_preferred_addrs = ISC_FALSE;
struct timeval tv;
lease = client->active_lease;
......@@ -4392,6 +4393,10 @@ dhc6_check_times(struct client_state *client)
if (tmp < depref)
depref = tmp;
if (!(addr->flags & DHC6_ADDR_EXPIRED)) {
has_preferred_addrs = ISC_TRUE;
}
}
if (!(addr->flags & DHC6_ADDR_EXPIRED)) {
......@@ -4550,7 +4555,10 @@ dhc6_check_times(struct client_state *client)
break;
default:
log_fatal("Impossible condition at %s:%d.", MDL);
if (has_preferred_addrs) {
log_fatal("Impossible condition, state %d at %s:%d.",
client->state, MDL);
}
}
/* Separately, set a time at which we will depref and expire
......
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