mem-pool: Fix potential memory leak and lost leases when reassigning leases

If no offline leases are available for the current client and assigning online
leases is disabled, and if all IPs of the pool have already been assigned to
clients we look for offline leases that previously were assigned to other
clients.

In case the current client has online leases the previous code would
replace the existing mapping entry and besides resulting in a memory leak
the online leases would be lost forever (even if the client later releases
the addresses).  If this happens repeatedly the number of available addresses
would decrease even though the total number of online and offline leases seen
in `ipsec leases` would indicate that there are free addresses available.

Fixes #764.
This commit is contained in:
Tobias Brunner
2014-11-11 19:00:02 +01:00
parent fc02a9d4b9
commit 8ab1b29da4
+6 -2
View File
@@ -342,9 +342,13 @@ static int get_reassigned(private_mem_pool_t *this, identification_t *id)
if (offset)
{
entry = entry_create(id);
entry = this->leases->get(this->leases, id);
if (!entry)
{
entry = entry_create(id);
this->leases->put(this->leases, entry->id, entry);
}
array_insert(entry->online, ARRAY_TAIL, &offset);
this->leases->put(this->leases, entry->id, entry);
}
return offset;
}