Recommit removed Rev. 1.40. This fix does solve a FPE with negative lease
time as described in the PR below. It seems that this patch should have been part of the vendor tree but got accidently missed in the 3.0.1 final version. It will definitly be part of 3.0.2 but until then it's a long way to go. Submitted by: ISC (Vendor) PR: bin/54517
This commit is contained in:
parent
7611a6dcd6
commit
93fb40624f
@ -838,11 +838,15 @@ void dhcpack (packet)
|
||||
|
||||
/* If it wasn't specified by the server, calculate it. */
|
||||
if (!client -> new -> renewal)
|
||||
client -> new -> renewal =
|
||||
client -> new -> expiry / 2;
|
||||
client -> new -> renewal = client -> new -> expiry / 2 + 1;
|
||||
|
||||
if (client -> new -> renewal <= 0)
|
||||
client -> new -> renewal = TIME_MAX;
|
||||
|
||||
/* Now introduce some randomness to the renewal time: */
|
||||
client -> new -> renewal = (((client -> new -> renewal + 3) * 3 / 4) +
|
||||
if (client -> new -> renewal <= TIME_MAX / 3 - 3)
|
||||
client -> new -> renewal =
|
||||
(((client -> new -> renewal + 3) * 3 / 4) +
|
||||
(random () % /* XXX NUMS */
|
||||
((client -> new -> renewal + 3) / 4)));
|
||||
|
||||
@ -861,14 +865,25 @@ void dhcpack (packet)
|
||||
} else
|
||||
client -> new -> rebind = 0;
|
||||
|
||||
if (!client -> new -> rebind)
|
||||
client -> new -> rebind =
|
||||
(client -> new -> expiry * 7) / 8; /* XXX NUMS */
|
||||
if (client -> new -> rebind <= 0) {
|
||||
if (client -> new -> expiry <= TIME_MAX / 7)
|
||||
client -> new -> rebind =
|
||||
client -> new -> expiry * 7 / 8;
|
||||
else
|
||||
client -> new -> rebind =
|
||||
client -> new -> expiry / 8 * 7;
|
||||
}
|
||||
|
||||
/* Make sure our randomness didn't run the renewal time past the
|
||||
rebind time. */
|
||||
if (client -> new -> renewal > client -> new -> rebind)
|
||||
client -> new -> renewal = (client -> new -> rebind * 3) / 4;
|
||||
if (client -> new -> renewal > client -> new -> rebind) {
|
||||
if (client -> new -> rebind <= TIME_MAX / 3)
|
||||
client -> new -> renewal =
|
||||
client -> new -> rebind * 3 / 4;
|
||||
else
|
||||
client -> new -> renewal =
|
||||
client -> new -> rebind / 4 * 3;
|
||||
}
|
||||
|
||||
client -> new -> expiry += cur_time;
|
||||
/* Lease lengths can never be negative. */
|
||||
|
Loading…
Reference in New Issue
Block a user