[pve-devel] [PATCH qemu-server 1/4] ovmf: enroll ms 2023 cert: change QSD ID to allow calling outside of VM start

Fiona Ebner f.ebner at proxmox.com
Tue Nov 18 13:34:39 CET 2025


The main QSD instance with ID $vmid can only be re-used as part of
VM start tasks. In preparation to allow calling the method from a new
enroll-efi-keys command/endpoint, change the QSD ID to something else.

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 src/PVE/QemuServer/OVMF.pm | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/PVE/QemuServer/OVMF.pm b/src/PVE/QemuServer/OVMF.pm
index 408144a0..409ad022 100644
--- a/src/PVE/QemuServer/OVMF.pm
+++ b/src/PVE/QemuServer/OVMF.pm
@@ -278,8 +278,6 @@ sub print_ovmf_commandline {
     return ($cmd, $machine_flags);
 }
 
-# May only be called as part of VM start right now, because it uses the main QSD associated to the
-# VM. If required for another scenario, change the QSD ID to something else.
 sub ensure_ms_2023_cert_enrolled {
     my ($storecfg, $vmid, $efidisk_str) = @_;
 
@@ -289,19 +287,22 @@ sub ensure_ms_2023_cert_enrolled {
 
     print "efidisk0: enrolling Microsoft UEFI CA 2023\n";
 
-    my $new_qsd = !PVE::QemuServer::Helpers::qsd_running_locally($vmid);
-    PVE::QemuServer::QSD::start($vmid) if $new_qsd;
+    my $qsd_id = "vm-$vmid-efi-enroll";
+    if (my $qsd_pid = PVE::QemuServer::Helpers::qsd_running_locally($qsd_id)) {
+        die "QEMU storage daemon $qsd_id already running with PID $qsd_pid (left over process?)\n";
+    }
+    PVE::QemuServer::QSD::start($qsd_id);
 
     eval {
         my $efi_vars_path =
-            PVE::QemuServer::QSD::add_fuse_export($vmid, $efidisk, 'efidisk0-enroll');
+            PVE::QemuServer::QSD::add_fuse_export($qsd_id, $efidisk, 'efidisk0-enroll');
         PVE::Tools::run_command(
             ['virt-fw-vars', '--inplace', $efi_vars_path, '--distro-keys', 'ms-uefi']);
-        PVE::QemuServer::QSD::remove_fuse_export($vmid, 'efidisk0-enroll');
+        PVE::QemuServer::QSD::remove_fuse_export($qsd_id, 'efidisk0-enroll');
     };
     my $err = $@;
 
-    PVE::QemuServer::QSD::quit($vmid) if $new_qsd;
+    PVE::QemuServer::QSD::quit($qsd_id);
 
     die "efidisk0: enrolling Microsoft UEFI CA 2023 failed - $err" if $err;
 
-- 
2.47.3





More information about the pve-devel mailing list