Commit d4c64800 authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Daniel P. Berrangé
Browse files

cipher: fix leak on initialization error



On error path, ctx may be leaked. Assign ctx earlier, and call
qcrypto_cipher_free() on error.

Spotted thanks to ASAN.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
parent 82ecffa8
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -254,6 +254,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
    cipher->mode = mode;

    ctx = g_new0(QCryptoCipherNettle, 1);
    cipher->opaque = ctx;

    switch (alg) {
    case QCRYPTO_CIPHER_ALG_DES_RFB:
@@ -384,13 +385,11 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
    }

    ctx->iv = g_new0(uint8_t, ctx->blocksize);
    cipher->opaque = ctx;

    return cipher;

 error:
    g_free(cipher);
    g_free(ctx);
    qcrypto_cipher_free(cipher);
    return NULL;
}