Commit 77933170 authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3692] Prevent infinite loops in allocation engine when pool exhausted.

parent d4c29082
// Copyright (C) 2012-2014 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
......@@ -674,6 +674,9 @@ AllocEngine::allocateLease4(const SubnetPtr& subnet, const ClientIdPtr& clientid
/// moment, but we currently do not control expiration time at all
unsigned int i = attempts_;
do {
// Decrease the number of remaining attempts here so as we guarantee
// that it is decreased when the code below uses "continue".
--i;
IOAddress candidate = allocator->pickAddress(subnet, clientid,
ctx.requested_address_);
......@@ -710,7 +713,6 @@ AllocEngine::allocateLease4(const SubnetPtr& subnet, const ClientIdPtr& clientid
// Continue trying allocation until we run out of attempts
// (or attempts are set to 0, which means infinite)
--i;
} while ((i > 0) || !attempts_);
// Unable to allocate an address, return an empty lease.
......
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