
On 12/11/24 5:37 AM, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
When the vTPM source path is specified, such as: <source type=".." path="/my/tpm"/>
Do not delete the parent directory, but only the given file/dir.
Fixes: commit f1304cc566 ("qemu_tpm: handle file/block storage source")
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Tested this and directory for default backend and also file for new file backend are being deleted now. Tested-by: Stefan Berger <stefanb@linux.ibm.com>
--- src/qemu/qemu_tpm.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c index 942ee64263..3e97518c06 100644 --- a/src/qemu/qemu_tpm.c +++ b/src/qemu/qemu_tpm.c @@ -214,9 +214,31 @@ qemuTPMEmulatorCreateStorage(virDomainTPMDef *tpm, static void qemuTPMEmulatorDeleteStorage(virDomainTPMDef *tpm) { - g_autofree char *path = g_path_get_dirname(tpm->data.emulator.source_path); + const char *source_path = tpm->data.emulator.source_path; + + switch (tpm->data.emulator.source_type) { + case VIR_DOMAIN_TPM_SOURCE_TYPE_FILE: { + if (unlink(source_path) && errno != ENOENT) + virReportSystemError(errno, + _("Cannot delete file '%1$s'"), + source_path); + break; + } + + case VIR_DOMAIN_TPM_SOURCE_TYPE_DIR: { + ignore_value(virFileDeleteTree(source_path)); + break; + }
- ignore_value(virFileDeleteTree(path)); + case VIR_DOMAIN_TPM_SOURCE_TYPE_DEFAULT: + case VIR_DOMAIN_TPM_SOURCE_TYPE_LAST: + default: { + g_autofree char *vm_uuid_dir = g_path_get_dirname(source_path); + + ignore_value(virFileDeleteTree(vm_uuid_dir)); + } + + } }