crypto: Fix memory leaks in set_loaded for tls-*
authorKevin Wolf <kwolf@redhat.com>
Mon, 30 Nov 2020 10:56:14 +0000 (11:56 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Fri, 29 Jan 2021 17:07:53 +0000 (17:07 +0000)
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 <kwolf@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
crypto/tlscredsanon.c
crypto/tlscredspsk.c
crypto/tlscredsx509.c

index 30275b684772ef6436a7d5c01ab25b6145c4bf29..bea5f76c55dae44152d06a2c4c25b014dc8b5626 100644 (file)
@@ -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);
     }
 }
 
index e26807b899e9f2723be43b0144a5e81d887dad1e..f5a31108d157378b76e1da04d30c3924d947f010 100644 (file)
@@ -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);
     }
 }
 
index c89dd62435b4854d6834325c9438cafa674784be..dbadad4df28e66f175a23d82e9926886a1473dd0 100644 (file)
@@ -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);
     }
 }