]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: extend kernel cmdline with extra args v255-rc1
authorSam Leonard <sam.leonard@codethink.co.uk>
Mon, 6 Nov 2023 10:25:12 +0000 (10:25 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 6 Nov 2023 11:46:38 +0000 (11:46 +0000)
This changes how the "extra" command line arguments passed to vmspawn
are handled.

Previously they were appended to the QEMU command line directly.
Now they are appended to the kernel command line using SMBIOS instead.

man/systemd-vmspawn.xml
src/vmspawn/vmspawn.c

index be5b4436196dd6b4ffb7764b2cba9f8405662efb..bf3aaf028eafeccd66ea222d8a78d09fa8ddb3f0 100644 (file)
@@ -39,7 +39,7 @@
   <refsect1>
     <title>Options</title>
 
-    <para>The arguments are passed straight through to QEMU, extending its command line arguments.</para>
+    <para>The excess arguments are passed as extra kernel command line arguments using SMBIOS.</para>
 
     <para>The following options are understood:</para>
 
index 68c483ad02b37f4fa3db6c4acf695e7d70e85e26..ab137df0a7155d3ea4f48d3bbfee0016a38951a8 100644 (file)
@@ -211,7 +211,7 @@ static int parse_argv(int argc, char *argv[]) {
 static int run_virtual_machine(void) {
         _cleanup_(ovmf_config_freep) OvmfConfig *ovmf_config = NULL;
         _cleanup_strv_free_ char **cmdline = NULL;
-        _cleanup_free_ char *machine = NULL, *qemu_binary = NULL, *mem = NULL;
+        _cleanup_free_ char *machine = NULL, *qemu_binary = NULL, *mem = NULL, *kcl = NULL;
         int r;
 
         bool use_kvm = arg_qemu_kvm > 0;
@@ -357,9 +357,23 @@ static int run_virtual_machine(void) {
         if (r < 0)
                 return log_oom();
 
-        r = strv_extend_strv(&cmdline, arg_parameters, false);
-        if (r < 0)
-                return log_oom();
+        if (strv_length(arg_parameters) != 0) {
+#if ARCHITECTURE_SUPPORTS_SMBIOS
+                kcl = strv_join(arg_parameters, " ");
+                if (!kcl)
+                        return log_oom();
+
+                r = strv_extend(&cmdline, "-smbios");
+                if (r < 0)
+                        return log_oom();
+
+                r = strv_extendf(&cmdline, "type=11,value=io.systemd.stub.kernel-cmdline-extra=%s", kcl);
+                if (r < 0)
+                        return log_oom();
+#else
+                log_warning("Cannot append extra args to kernel cmdline, native architecture doesn't support SMBIOS");
+#endif
+        }
 
         pid_t child_pid;
         r = safe_fork(qemu_binary, 0, &child_pid);