qemu: tpm: do not update profile name for transient domains

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: d79542eec6
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
Ján Tomko 2024-12-03 12:00:08 +01:00
parent c63bdd17b9
commit 81da7a2c2a
2 changed files with 13 additions and 2 deletions

View 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,

View 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;