On 12/11/24 5:37 AM, marcandre.lureau@xxxxxxxxxx wrote:
From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
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@xxxxxxxxxx>
Tested this and directory for default backend and also file for new file
backend are being deleted now.
Tested-by: Stefan Berger <stefanb@xxxxxxxxxxxxx>
---
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));
+ }
+
+ }
}