receiver: Properly clean up if hasher or RNG can't be created

This commit is contained in:
Tobias Brunner 2025-03-04 15:30:25 +01:00
parent 380ec66c92
commit 4e2cf58961

View File

@ -656,8 +656,8 @@ METHOD(receiver_t, del_esp_cb, void,
METHOD(receiver_t, destroy, void,
private_receiver_t *this)
{
this->rng->destroy(this->rng);
this->hasher->destroy(this->hasher);
DESTROY_IF(this->rng);
DESTROY_IF(this->hasher);
this->esp_cb_mutex->destroy(this->esp_cb_mutex);
free(this);
}
@ -717,15 +717,14 @@ receiver_t *receiver_create()
if (!this->hasher)
{
DBG1(DBG_NET, "creating cookie hasher failed, no hashers supported");
free(this);
destroy(this);
return NULL;
}
this->rng = lib->crypto->create_rng(lib->crypto, RNG_STRONG);
if (!this->rng)
{
DBG1(DBG_NET, "creating cookie RNG failed, no RNG supported");
this->hasher->destroy(this->hasher);
free(this);
destroy(this);
return NULL;
}
if (!this->rng->get_bytes(this->rng, SECRET_LENGTH, this->secret))