From: Arian van Putten Date: Thu, 1 May 2025 11:19:24 +0000 (+0200) Subject: vmspawn: don't use vmgenid on aarch64 as it's not supported X-Git-Tag: v258-rc1~699^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f17247c70181edb1a4b767996021c3589ecace64;p=thirdparty%2Fsystemd.git vmspawn: don't use vmgenid on aarch64 as it's not supported fixes: ``` qemu-kvm: -device vmgenid,guid=5f303a47-6fae-4dd7-969c-6c1ea61e816e: 'vmgenid' is not a valid device model name ``` --- diff --git a/src/vmspawn/vmspawn-util.h b/src/vmspawn/vmspawn-util.h index b3d72ede726..ff1cffd13e1 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 4b1898ac3f6..4ee9e473938 100644 --- a/src/vmspawn/vmspawn.c +++ b/src/vmspawn/vmspawn.c @@ -1656,23 +1656,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 */ _cleanup_free_ char *runtime_dir = NULL;