diff --git a/src/vmspawn/vmspawn-util.h b/src/vmspawn/vmspawn-util.h index b3d72ede72..ff1cffd13e 100644 --- a/src/vmspawn/vmspawn-util.h +++ b/src/vmspawn/vmspawn-util.h @@ -12,6 +12,12 @@ # 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 diff --git a/src/vmspawn/vmspawn.c b/src/vmspawn/vmspawn.c index 4b1898ac3f..4ee9e47393 100644 --- a/src/vmspawn/vmspawn.c +++ b/src/vmspawn/vmspawn.c @@ -1656,24 +1656,26 @@ 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(); + + if (strv_extend_many(&cmdline, "-device", vmgenid_device) < 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 we are going to be starting any units with state then create our runtime dir */ _cleanup_free_ char *runtime_dir = NULL; _cleanup_(rm_rf_physical_and_freep) char *runtime_dir_destroy = NULL;