summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2016-11-09 14:28:18 +0400
committerDaniel P. Berrange <berrange@redhat.com>2016-12-21 14:26:26 +0000
commitd4c64800bbe1332328695a551b84ae68590c90fd (patch)
treecb1ceb45db7ac578f0f197b4fe164bd0cfb83205 /crypto
parent82ecffa8c050bf5bbc13329e9b65eac1caa5b55c (diff)
downloadqemu-d4c64800bbe1332328695a551b84ae68590c90fd.tar.gz
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>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/cipher-nettle.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c
index cd094cd6a5..5798910d6c 100644
--- a/crypto/cipher-nettle.c
+++ b/crypto/cipher-nettle.c
@@ -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;
}