]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu_tpm: do not delete parent directory for custom source
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 11 Dec 2024 10:37:14 +0000 (14:37 +0400)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 6 Jan 2025 14:58:42 +0000 (15:58 +0100)
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-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_tpm.c

index 942ee64263fca87802e12f2201674f0de82a3fd9..3e97518c06a3fe57445316ccc645bfffbfb70acd 100644 (file)
@@ -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));
+    }
+
+    }
 }