]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
receiver: Properly clean up if hasher or RNG can't be created
authorTobias Brunner <tobias@strongswan.org>
Tue, 4 Mar 2025 14:30:25 +0000 (15:30 +0100)
committerTobias Brunner <tobias@strongswan.org>
Tue, 4 Mar 2025 14:30:25 +0000 (15:30 +0100)
src/libcharon/network/receiver.c

index 0b2da1afafcd19b08ebd9981871366eaffae58ab..e79d5974409e909a30f1ec58f52fdb6957ad9ea6 100644 (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))