]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: tpm: do not update profile name for transient domains
authorJán Tomko <jtomko@redhat.com>
Tue, 3 Dec 2024 11:00:08 +0000 (12:00 +0100)
committerJán Tomko <jtomko@redhat.com>
Wed, 11 Dec 2024 19:10:43 +0000 (20:10 +0100)
If we do not have a persistent definition, there's no point in
looking for it since we cannot store it.

Also skip the update if the tpm device(s) in the persistent
definition are different.

This fixes the crash when starting a transient domain.

https://issues.redhat.com/browse/RHEL-69774
https://gitlab.com/libvirt/libvirt/-/issues/715

Fixes: d79542eec669eb9c449bb8228179e7a87e768017
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
src/qemu/qemu_extdevice.c
src/qemu/qemu_tpm.c

index a6f31f977359a853b18b0c7c0e798365620b08a3..954cb323a4a37128286bbb889c10e4d0900f7ed9 100644 (file)
@@ -190,7 +190,18 @@ qemuExtDevicesStart(virQEMUDriver *driver,
 
     for (i = 0; i < def->ntpms; i++) {
         virDomainTPMDef *tpm = def->tpms[i];
-        virDomainTPMDef *persistentTPMDef = persistentDef->tpms[i];
+        virDomainTPMDef *persistentTPMDef = NULL;
+
+        if (persistentDef) {
+            /* do not try to update the profile in the persistent definition
+             * if the device does not match */
+            if (persistentDef->ntpms == def->ntpms)
+                persistentTPMDef = persistentDef->tpms[i];
+            if (persistentTPMDef &&
+                (persistentTPMDef->type != tpm->type ||
+                 persistentTPMDef->model != tpm->model))
+                persistentTPMDef = NULL;
+        }
 
         if (tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR &&
             qemuExtTPMStart(driver, vm, tpm, persistentTPMDef,
index f223dcb9aeabbc6a4182f50d50b943eaf396f81f..f5e0184e540c2cc5ec25a37802e73add4549a48b 100644 (file)
@@ -773,7 +773,7 @@ qemuTPMEmulatorBuildCommand(virDomainTPMDef *tpm,
                                 incomingMigration) < 0)
         goto error;
 
-    if (run_setup && !incomingMigration &&
+    if (run_setup && !incomingMigration && persistentTPMDef &&
         qemuTPMEmulatorUpdateProfileName(&tpm->data.emulator, persistentTPMDef,
                                          cfg, saveDef) < 0)
         goto error;