]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: Pass extra cmdline via smbios when direct booting a UKI
authorDaan De Meyer <daan@amutable.com>
Wed, 1 Apr 2026 20:52:59 +0000 (22:52 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 2 Apr 2026 08:18:48 +0000 (10:18 +0200)
-cmdline doesn't work when direct booting a UKI so use SMBIOS instead.

src/vmspawn/vmspawn.c

index 02f2b0df2e08a25540ed469b56c9080ab54599ff..a93fb0d45604444ad71eb1cb4a9b45aefe05348c 100644 (file)
@@ -47,6 +47,7 @@
 #include "hostname-setup.h"
 #include "hostname-util.h"
 #include "id128-util.h"
+#include "kernel-image.h"
 #include "log.h"
 #include "machine-bind-user.h"
 #include "machine-credential.h"
@@ -1373,11 +1374,24 @@ static int cmdline_add_kernel_cmdline(char ***cmdline, const char *kernel, const
         if (strv_isempty(arg_kernel_cmdline_extra))
                 return 0;
 
+        KernelImageType type = _KERNEL_IMAGE_TYPE_INVALID;
+        if (kernel) {
+                r = inspect_kernel(
+                                AT_FDCWD,
+                                kernel,
+                                &type,
+                                /* ret_cmdline= */ NULL,
+                                /* ret_uname= */ NULL,
+                                /* ret_pretty_name= */ NULL);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to determine '%s' kernel image type: %m", kernel);
+        }
+
         _cleanup_free_ char *kcl = strv_join(arg_kernel_cmdline_extra, " ");
         if (!kcl)
                 return log_oom();
 
-        if (kernel) {
+        if (kernel && type != KERNEL_IMAGE_TYPE_UKI) {
                 if (strv_extend_many(cmdline, "-append", kcl) < 0)
                         return log_oom();
         } else {