]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Alter the qemuDomainGetSecretAESAlias to add new arg
authorJohn Ferlan <jferlan@redhat.com>
Fri, 24 Jun 2016 19:31:57 +0000 (15:31 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 19 Jul 2016 13:40:10 +0000 (09:40 -0400)
Soon we will be adding luks encryption support. Since a volume could require
both a luks secret and a secret to give to the server to use of the device,
alter the alias generation to create a slightly different alias so that
we don't have two objects with the same alias.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/qemu/qemu_alias.c
src/qemu/qemu_alias.h
src/qemu/qemu_domain.c
src/qemu/qemu_hotplug.c

index d6240710ab34000da76fdf08a6a7444a9af23eeb..51a654a8504f3c890ca3f6fea35d030b5fbb9b8b 100644 (file)
@@ -485,13 +485,16 @@ qemuDomainGetMasterKeyAlias(void)
 
 
 /* qemuDomainGetSecretAESAlias:
+ * @srcalias: Source alias used to generate the secret alias
+ * @isLuks: True when we are generating a secret for LUKS encrypt/decrypt
  *
  * Generate and return an alias for the encrypted secret
  *
  * Returns NULL or a string containing the alias
  */
 char *
-qemuDomainGetSecretAESAlias(const char *srcalias)
+qemuDomainGetSecretAESAlias(const char *srcalias,
+                            bool isLuks)
 {
     char *alias;
 
@@ -501,7 +504,10 @@ qemuDomainGetSecretAESAlias(const char *srcalias)
         return NULL;
     }
 
-    ignore_value(virAsprintf(&alias, "%s-secret0", srcalias));
+    if (isLuks)
+        ignore_value(virAsprintf(&alias, "%s-luks-secret0", srcalias));
+    else
+        ignore_value(virAsprintf(&alias, "%s-secret0", srcalias));
 
     return alias;
 }
index e328a9b66420b2aa6891d93f69b05cdf7d70e728..d1c6ba82b8d87ca6c733e630a7713b7c781e1e52 100644 (file)
@@ -69,6 +69,7 @@ char *qemuAliasFromDisk(const virDomainDiskDef *disk);
 
 char *qemuDomainGetMasterKeyAlias(void);
 
-char *qemuDomainGetSecretAESAlias(const char *srcalias);
+char *qemuDomainGetSecretAESAlias(const char *srcalias,
+                                  bool isLuks);
 
 #endif /* __QEMU_ALIAS_H__*/
index 319293a760d2e6cb4b4c3263e4617e2cbc467329..0a44abf9ac1952ddedf0141eff1b84861f9d91f5 100644 (file)
@@ -895,6 +895,7 @@ qemuDomainSecretPlainSetup(virConnectPtr conn,
  * @secretUsageType: The virSecretUsageType
  * @username: username to use for authentication (may be NULL)
  * @seclookupdef: Pointer to seclookupdef data
+ * @isLuks: True/False for is for luks (alias generation)
  *
  * Taking a secinfo, fill in the AES specific information using the
  *
@@ -907,7 +908,8 @@ qemuDomainSecretAESSetup(virConnectPtr conn,
                          const char *srcalias,
                          virSecretUsageType secretUsageType,
                          const char *username,
-                         virSecretLookupTypeDefPtr seclookupdef)
+                         virSecretLookupTypeDefPtr seclookupdef,
+                         bool isLuks)
 {
     int ret = -1;
     uint8_t *raw_iv = NULL;
@@ -921,7 +923,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn,
     if (VIR_STRDUP(secinfo->s.aes.username, username) < 0)
         return -1;
 
-    if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias)))
+    if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
         return -1;
 
     /* Create a random initialization vector */
@@ -970,6 +972,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn,
  * @secretUsageType: The virSecretUsageType
  * @username: username to use for authentication (may be NULL)
  * @seclookupdef: Pointer to seclookupdef data
+ * @isLuks: True when is luks (generates different alias)
  *
  * If we have the encryption API present and can support a secret object, then
  * build the AES secret; otherwise, build the Plain secret. This is the magic
@@ -985,14 +988,15 @@ qemuDomainSecretSetup(virConnectPtr conn,
                       const char *srcalias,
                       virSecretUsageType secretUsageType,
                       const char *username,
-                      virSecretLookupTypeDefPtr seclookupdef)
+                      virSecretLookupTypeDefPtr seclookupdef,
+                      bool isLuks)
 {
     if (virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC) &&
         virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) &&
         secretUsageType == VIR_SECRET_USAGE_TYPE_CEPH) {
         if (qemuDomainSecretAESSetup(conn, priv, secinfo, srcalias,
                                      secretUsageType, username,
-                                     seclookupdef) < 0)
+                                     seclookupdef, isLuks) < 0)
             return -1;
     } else {
         if (qemuDomainSecretPlainSetup(conn, secinfo, secretUsageType,
@@ -1052,7 +1056,6 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn,
     qemuDomainSecretInfoPtr secinfo = NULL;
 
     if (conn && qemuDomainSecretDiskCapable(src)) {
-
         virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI;
         qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
 
@@ -1064,7 +1067,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn,
 
         if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias,
                                   secretUsageType, src->auth->username,
-                                  &src->auth->seclookupdef) < 0)
+                                  &src->auth->seclookupdef, false) < 0)
             goto error;
 
         diskPriv->secinfo = secinfo;
@@ -1131,7 +1134,7 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn,
             if (qemuDomainSecretSetup(conn, priv, secinfo, hostdev->info->alias,
                                       VIR_SECRET_USAGE_TYPE_ISCSI,
                                       iscsisrc->auth->username,
-                                      &iscsisrc->auth->seclookupdef) < 0)
+                                      &iscsisrc->auth->seclookupdef, false) < 0)
                 goto error;
 
             hostdevPriv->secinfo = secinfo;
index 9fc431bfda8dcffa51a0f889193971765827aa9d..6ed67e13cef1249eeaff6464c1ed84a3712ed691 100644 (file)
@@ -374,7 +374,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
                                   secobjProps);
         secobjProps = NULL; /* qemuMonitorAddObject consumes */
         if (rv < 0)
-            goto monitor_error;
+            goto exit_monitor;
     }
     secobjAdded = true;
 
@@ -2874,7 +2874,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) &&
         qemuDomainSecretDiskCapable(disk->src)) {
 
-        if (!(objAlias = qemuDomainGetSecretAESAlias(disk->info.alias))) {
+        if (!(objAlias =
+              qemuDomainGetSecretAESAlias(disk->info.alias, false))) {
             VIR_FREE(drivestr);
             return -1;
         }