mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-04 00:00:14 -04:00
mem-pool: Reject the creation of unintentionally empty pools
If a base address is configured, we don't expect the pool to be empty, so reject the creation (e.g. with the broadcast address as base). References strongswan/strongswan#2205
This commit is contained in:
parent
afeac365fd
commit
5f99a28381
@ -702,6 +702,13 @@ mem_pool_t *mem_pool_create(char *name, host_t *base, int bits)
|
||||
{ /* only serve the second address of the subnet */
|
||||
this->size--;
|
||||
}
|
||||
if (!this->size)
|
||||
{
|
||||
DBG1(DBG_CFG, "virtual IP pool %H/%d is empty",
|
||||
base, addr_bits - bits);
|
||||
destroy(this);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return &this->public;
|
||||
}
|
||||
|
@ -286,11 +286,20 @@ static void load_addrs(private_load_tester_config_t *this)
|
||||
from = host_create_from_subnet(token, &bits);
|
||||
if (from)
|
||||
{
|
||||
DBG1(DBG_CFG, "loaded load-tester address pool %H/%d on %s",
|
||||
from, bits, iface);
|
||||
pool = mem_pool_create(iface, from, bits);
|
||||
if (pool)
|
||||
{
|
||||
DBG1(DBG_CFG, "loaded load-tester address pool %H/%d "
|
||||
"on %s", from, bits, iface);
|
||||
this->pools->insert_last(this->pools, pool);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
DBG1(DBG_CFG, "invalid load-tester address pool %H/%d "
|
||||
"on %s, skipped", from, bits, iface);
|
||||
}
|
||||
from->destroy(from);
|
||||
this->pools->insert_last(this->pools, pool);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -153,13 +153,10 @@ START_TEST(test_cidr_offset)
|
||||
pool->destroy(pool);
|
||||
base->destroy(base);
|
||||
|
||||
/* due to size == 0 we get the requested IP back */
|
||||
/* this results in an empty pool, which is rejected */
|
||||
base = host_create_from_string("192.168.0.255", 0);
|
||||
pool = mem_pool_create("test", base, 24);
|
||||
ck_assert_int_eq(0, pool->get_size(pool));
|
||||
assert_acquire(pool, "192.168.0.1", "192.168.0.1", MEM_POOL_NEW);
|
||||
pool->destroy(pool);
|
||||
|
||||
ck_assert(!pool);
|
||||
base->destroy(base);
|
||||
}
|
||||
END_TEST
|
||||
|
Loading…
x
Reference in New Issue
Block a user