From 81da7a2c2a2d490cddaaa77d3e3b36e210b38bd7 Mon Sep 17 00:00:00 2001 Message-ID: <81da7a2c2a2d490cddaaa77d3e3b36e210b38bd7.1735210585.git.mprivozn@redhat.com> From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 3 Dec 2024 12:00:08 +0100 Subject: [PATCH] qemu: tpm: do not update profile name for transient domains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Jiri Denemark Reviewed-by: Stefan Berger Signed-off-by: Michal Privoznik --- src/qemu/qemu_extdevice.c | 13 ++++++++++++- src/qemu/qemu_tpm.c | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c index a6f31f9773..954cb323a4 100644 --- a/src/qemu/qemu_extdevice.c +++ b/src/qemu/qemu_extdevice.c @@ -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, diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c index f223dcb9ae..f5e0184e54 100644 --- a/src/qemu/qemu_tpm.c +++ b/src/qemu/qemu_tpm.c @@ -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; -- 2.45.2