]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dcrypt: dcrypt_ctx_hmac_init() - Clean up properly in error code paths
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 8 Aug 2024 20:42:48 +0000 (23:42 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 8 Aug 2024 20:42:48 +0000 (23:42 +0300)
src/lib-dcrypt/dcrypt-openssl1.c
src/lib-dcrypt/dcrypt-openssl3.c

index 36bc017a3672825f1a1c2f41a290b5b9ec2c7f68..4291791d0f6c0ddf165031a1997470691d8bb01c 100644 (file)
@@ -687,6 +687,7 @@ dcrypt_openssl_ctx_hmac_init(struct dcrypt_context_hmac *ctx,
 {
        int ec;
 
+       i_assert(ctx->ctx == NULL);
        i_assert(ctx->md != NULL);
 #ifdef HAVE_HMAC_CTX_new
        ctx->ctx = HMAC_CTX_new();
@@ -696,6 +697,7 @@ dcrypt_openssl_ctx_hmac_init(struct dcrypt_context_hmac *ctx,
        ec = HMAC_Init_ex(ctx->ctx, ctx->key, ctx->klen, ctx->md, NULL);
        if (ec != 1) {
                HMAC_CTX_free(ctx->ctx);
+               ctx->ctx = NULL;
                return dcrypt_openssl_error(error_r);
        }
        return TRUE;
index 060d65fa5bfe9f2b853629f5739657f682d80f72..0a2359669fc8cb21a20bead60c09c90abff880ea 100644 (file)
@@ -623,6 +623,7 @@ dcrypt_openssl_ctx_hmac_init(struct dcrypt_context_hmac *ctx,
 {
        int ec;
 
+       i_assert(ctx->ctx == NULL);
        i_assert(ctx->mac != NULL);
        const char *name = EVP_MD_get0_name(ctx->md);
        OSSL_PARAM params[] = {
@@ -635,6 +636,7 @@ dcrypt_openssl_ctx_hmac_init(struct dcrypt_context_hmac *ctx,
        ec = EVP_MAC_init(ctx->ctx, ctx->key, ctx->klen, params);
        if (ec != 1) {
                EVP_MAC_CTX_free(ctx->ctx);
+               ctx->ctx = NULL;
                return dcrypt_openssl_error(error_r);
        }
        return TRUE;