[PATCH 7/7] storageBackendCreateQemuImgSecretPath: Refactor cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/storage/storage_util.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index 520fdd03d0..b57128eb2e 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -1259,10 +1259,10 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
                                       virStorageVolDef *vol)
 {
     virStorageEncryption *enc = vol->target.encryption;
-    char *secretPath = NULL;
-    uint8_t *secret = NULL;
+    g_autofree char *secretPath = NULL;
+    g_autofree uint8_t *secret = NULL;
     size_t secretlen = 0;
-    virConnectPtr conn = NULL;
+    g_autoptr(virConnect) conn = NULL;
     VIR_AUTOCLOSE fd = -1;
     VIR_IDENTITY_AUTORESTORE virIdentity *oldident = NULL;

@@ -1287,24 +1287,29 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
         return NULL;

     if (!(secretPath = virStoragePoolObjBuildTempFilePath(pool, vol)))
-        goto cleanup;
+        return NULL;

     if ((fd = g_mkstemp_full(secretPath, O_RDWR | O_CLOEXEC, S_IRUSR | S_IWUSR)) < 0) {
         virReportSystemError(errno, "%s",
                              _("failed to open secret file for write"));
-        goto error;
+        return NULL;
     }

     if (virSecretGetSecretString(conn, &enc->secrets[0]->seclookupdef,
                                  VIR_SECRET_USAGE_TYPE_VOLUME,
-                                 &secret, &secretlen) < 0)
-        goto error;
+                                 &secret, &secretlen) < 0) {
+        unlink(secretPath);
+        return NULL;
+    }

     if (safewrite(fd, secret, secretlen) < 0) {
+        virSecureErase(secret, secretlen);
         virReportSystemError(errno, "%s",
                              _("failed to write secret file"));
-        goto error;
+        unlink(secretPath);
+        return NULL;
     }
+    virSecureErase(secret, secretlen);

     if ((vol->target.perms->uid != (uid_t)-1) &&
         (vol->target.perms->gid != (gid_t)-1)) {
@@ -1312,21 +1317,12 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
                   vol->target.perms->gid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("failed to chown secret file"));
-            goto error;
+            unlink(secretPath);
+            return NULL;
         }
     }

- cleanup:
-    virObjectUnref(conn);
-    virSecureErase(secret, secretlen);
-    g_free(secret);
-
-    return secretPath;
-
- error:
-    unlink(secretPath);
-    VIR_FREE(secretPath);
-    goto cleanup;
+    return g_steal_pointer(&secretPath);
 }


-- 
2.39.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux