From: Marcin Siodelski Date: Tue, 27 Jan 2015 17:37:11 +0000 (+0100) Subject: [3692] Prevent infinite loops in allocation engine when pool exhausted. X-Git-Tag: trac3712_base~27^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=77933170ef18f387783cb4691dd35f56fca95c77;p=thirdparty%2Fkea.git [3692] Prevent infinite loops in allocation engine when pool exhausted. --- diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index 28677e98a8..ebc37256f8 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -1,4 +1,4 @@ -// 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.