Skip to content

Commit

Permalink
vmspawn: extend kernel cmdline with extra args
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
sam-leonard-ct authored and bluca committed Nov 6, 2023
1 parent 12c8a7d commit 4291f44
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
2 changes: 1 addition & 1 deletion man/systemd-vmspawn.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
22 changes: 18 additions & 4 deletions src/vmspawn/vmspawn.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 4291f44

Please sign in to comment.