From: Kevin Wolf Date: Mon, 30 Nov 2020 10:56:14 +0000 (+0100) Subject: crypto: Fix memory leaks in set_loaded for tls-* X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=ab366aae78bcac972a0920ffdda3136fc13fa093;p=qemu.git crypto: Fix memory leaks in set_loaded for tls-* If you set the loaded property to true when it was already true, the state is overwritten without freeing the old state first. Change the set_loaded callback so that it always frees the old state (which is a no-op if nothing was loaded) and only then load if requestsd. Signed-off-by: Kevin Wolf Signed-off-by: Daniel P. Berrangé --- diff --git a/crypto/tlscredsanon.c b/crypto/tlscredsanon.c index 30275b6847..bea5f76c55 100644 --- a/crypto/tlscredsanon.c +++ b/crypto/tlscredsanon.c @@ -123,10 +123,9 @@ qcrypto_tls_creds_anon_prop_set_loaded(Object *obj, { QCryptoTLSCredsAnon *creds = QCRYPTO_TLS_CREDS_ANON(obj); + qcrypto_tls_creds_anon_unload(creds); if (value) { qcrypto_tls_creds_anon_load(creds, errp); - } else { - qcrypto_tls_creds_anon_unload(creds); } } diff --git a/crypto/tlscredspsk.c b/crypto/tlscredspsk.c index e26807b899..f5a31108d1 100644 --- a/crypto/tlscredspsk.c +++ b/crypto/tlscredspsk.c @@ -192,10 +192,9 @@ qcrypto_tls_creds_psk_prop_set_loaded(Object *obj, { QCryptoTLSCredsPSK *creds = QCRYPTO_TLS_CREDS_PSK(obj); + qcrypto_tls_creds_psk_unload(creds); if (value) { qcrypto_tls_creds_psk_load(creds, errp); - } else { - qcrypto_tls_creds_psk_unload(creds); } } diff --git a/crypto/tlscredsx509.c b/crypto/tlscredsx509.c index c89dd62435..dbadad4df2 100644 --- a/crypto/tlscredsx509.c +++ b/crypto/tlscredsx509.c @@ -694,10 +694,9 @@ qcrypto_tls_creds_x509_prop_set_loaded(Object *obj, { QCryptoTLSCredsX509 *creds = QCRYPTO_TLS_CREDS_X509(obj); + qcrypto_tls_creds_x509_unload(creds); if (value) { qcrypto_tls_creds_x509_load(creds, errp); - } else { - qcrypto_tls_creds_x509_unload(creds); } }