Skip to content

Commit

Permalink
mem-pool: Reject the creation of unintentionally empty pools
Browse files Browse the repository at this point in the history
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 #2205
  • Loading branch information
tobiasbrunner committed Apr 15, 2024
1 parent afeac36 commit 5f99a28
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
7 changes: 7 additions & 0 deletions src/libcharon/attributes/mem_pool.c
Expand Up @@ -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;
}
Expand Down
15 changes: 12 additions & 3 deletions src/libcharon/plugins/load_tester/load_tester_config.c
Expand Up @@ -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
{
Expand Down
7 changes: 2 additions & 5 deletions src/libcharon/tests/suites/test_mem_pool.c
Expand Up @@ -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
Expand Down

0 comments on commit 5f99a28

Please sign in to comment.