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: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Marc-André Lureau 2016-11-09 14:28:18 +04:00 committed by Daniel P. Berrange
parent 82ecffa8c0
commit d4c64800bb

View File

@ -254,6 +254,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
cipher->mode = mode; cipher->mode = mode;
ctx = g_new0(QCryptoCipherNettle, 1); ctx = g_new0(QCryptoCipherNettle, 1);
cipher->opaque = ctx;
switch (alg) { switch (alg) {
case QCRYPTO_CIPHER_ALG_DES_RFB: case QCRYPTO_CIPHER_ALG_DES_RFB:
@ -384,13 +385,11 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
} }
ctx->iv = g_new0(uint8_t, ctx->blocksize); ctx->iv = g_new0(uint8_t, ctx->blocksize);
cipher->opaque = ctx;
return cipher; return cipher;
error: error:
g_free(cipher); qcrypto_cipher_free(cipher);
g_free(ctx);
return NULL; return NULL;
} }