]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: don't use vmgenid on aarch64 as it's not supported
authorArian van Putten <arian.vanputten@gmail.com>
Thu, 1 May 2025 11:19:24 +0000 (13:19 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sat, 17 May 2025 11:43:20 +0000 (12:43 +0100)
fixes:

```
qemu-kvm: -device vmgenid,guid=5f303a47-6fae-4dd7-969c-6c1ea61e816e: 'vmgenid' is not a valid device model name
```

(cherry picked from commit f17247c70181edb1a4b767996021c3589ecace64)
(cherry picked from commit ddda4deda6b0d2864cb13839771e2543415f43e2)

src/vmspawn/vmspawn-util.h
src/vmspawn/vmspawn.c

index 959cb479601399b34c6d3c3d9f16253c286d225e..f7d8225b8f947075102f2a09342823157243f4b3 100644 (file)
 #  define ARCHITECTURE_SUPPORTS_SMBIOS 0
 #endif
 
+#if defined(__x86_64__) || defined(__i386__)
+# define ARCHITECTURE_SUPPORTS_VMGENID 1
+#else
+# define ARCHITECTURE_SUPPORTS_VMGENID 0
+#endif
+
 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
 #  define ARCHITECTURE_SUPPORTS_TPM 1
 #else
index 3efb45f7b3d3a0b17fbbd4616880b39b5da7a382..5b102549e716293f18c001e0ffaecb21342a872d 100644 (file)
@@ -1460,23 +1460,25 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                 if (strv_extend_many(&cmdline, "-uuid", SD_ID128_TO_UUID_STRING(arg_uuid)) < 0)
                         return log_oom();
 
-        /* Derive a vmgenid automatically from the invocation ID, in a deterministic way. */
-        sd_id128_t vmgenid;
-        r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(bd,84,6d,e3,e4,7d,4b,6c,a6,85,4a,87,0f,3c,a3,a0), &vmgenid);
-        if (r < 0) {
-                log_debug_errno(r, "Failed to get invocation ID, making up randomized vmgenid: %m");
+        if (ARCHITECTURE_SUPPORTS_VMGENID) {
+                /* Derive a vmgenid automatically from the invocation ID, in a deterministic way. */
+                sd_id128_t vmgenid;
+                r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(bd,84,6d,e3,e4,7d,4b,6c,a6,85,4a,87,0f,3c,a3,a0), &vmgenid);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to get invocation ID, making up randomized vmgenid: %m");
 
-                r = sd_id128_randomize(&vmgenid);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to make up randomized vmgenid: %m");
-        }
+                        r = sd_id128_randomize(&vmgenid);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to make up randomized vmgenid: %m");
+                }
 
-        _cleanup_free_ char *vmgenid_device = NULL;
-        if (asprintf(&vmgenid_device, "vmgenid,guid=" SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(vmgenid)) < 0)
-                return log_oom();
+                _cleanup_free_ char *vmgenid_device = NULL;
+                if (asprintf(&vmgenid_device, "vmgenid,guid=" SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(vmgenid)) < 0)
+                        return log_oom();
 
-        if (strv_extend_many(&cmdline, "-device", vmgenid_device) < 0)
-                return log_oom();
+                if (strv_extend_many(&cmdline, "-device", vmgenid_device) < 0)
+                        return log_oom();
+        }
 
         /* if we are going to be starting any units with state then create our runtime dir */
         if (arg_tpm != 0 || arg_directory || arg_runtime_mounts.n_mounts != 0) {