diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2016-11-09 14:28:18 +0400 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2016-12-21 14:26:26 +0000 |
commit | d4c64800bbe1332328695a551b84ae68590c90fd (patch) | |
tree | cb1ceb45db7ac578f0f197b4fe164bd0cfb83205 /crypto | |
parent | 82ecffa8c050bf5bbc13329e9b65eac1caa5b55c (diff) | |
download | qemu-d4c64800bbe1332328695a551b84ae68590c90fd.zip qemu-d4c64800bbe1332328695a551b84ae68590c90fd.tar.gz qemu-d4c64800bbe1332328695a551b84ae68590c90fd.tar.bz2 |
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.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c index cd094cd..5798910 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; } |