Fix memory leak in pg_hmac
authorDaniel Gustafsson <[email protected]>
Fri, 1 Oct 2021 20:47:05 +0000 (22:47 +0200)
committerDaniel Gustafsson <[email protected]>
Fri, 1 Oct 2021 20:47:05 +0000 (22:47 +0200)
The intermittent h buffer was not freed, causing it to leak. Backpatch
through 14 where HMAC was refactored to the current API.

Author: Sergey Shinderuk <[email protected]>
Discussion: https://postgr.es/m/af07e620-7e28-a742-4637-2bc44aa7c2be@postgrespro.ru
Backpatch-through: 14

src/common/hmac.c

index 1089db67443073e85eb29098f2ab76313d1bd34a..bfe2e7cb5e9d2898cb76f912317772e197170e32 100644 (file)
@@ -232,7 +232,10 @@ pg_hmac_final(pg_hmac_ctx *ctx, uint8 *dest, size_t len)
    memset(h, 0, ctx->digest_size);
 
    if (pg_cryptohash_final(ctx->hash, h, ctx->digest_size) < 0)
+   {
+       FREE(h);
        return -1;
+   }
 
    /* H(K XOR opad, tmp) */
    if (pg_cryptohash_init(ctx->hash) < 0 ||
@@ -240,9 +243,11 @@ pg_hmac_final(pg_hmac_ctx *ctx, uint8 *dest, size_t len)
        pg_cryptohash_update(ctx->hash, h, ctx->digest_size) < 0 ||
        pg_cryptohash_final(ctx->hash, dest, len) < 0)
    {
+       FREE(h);
        return -1;
    }
 
+   FREE(h);
    return 0;
 }