[PATCH v3 7/9] qemu: build command line for the TPM Proxy device

Ján Tomko jtomko at redhat.com
Thu May 14 14:10:25 UTC 2020


On a Wednesday in 2020, Daniel Henrique Barboza wrote:
>This patch wraps it up all the wiring done in previous patches,
>enabling a PPC64 guest to launch a guest using a TPM Proxy
>device.
>
>Note that device validation is already being done in qemu_validate.c,
>qemuValidateDomainDeviceDefTPM(), on domain define time. We don't
>need to verify QEMU capabilities for this device again inside
>qemu_command.c.
>
>Reviewed-by: Stefan Berger <stefanb at linux.ibm.com>
>Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
>---
> src/qemu/qemu_alias.c   | 16 ++++++++++++++++
> src/qemu/qemu_command.c | 21 +++++++++++++++++++++
> 2 files changed, 37 insertions(+)
>
>diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
>index b0ea62af39..08fe5aa501 100644
>--- a/src/qemu/qemu_alias.c
>+++ b/src/qemu/qemu_alias.c
>@@ -413,6 +413,18 @@ qemuAssignDeviceTPMAlias(virDomainTPMDefPtr tpm,
> }
>
>
>+static int
>+qemuAssignDeviceTPMProxyAlias(virDomainTPMDefPtr tpmproxy,
>+                              int idx)
>+{
>+    if (tpmproxy->info.alias)
>+        return 0;
>+
>+    tpmproxy->info.alias = g_strdup_printf("tpmproxy%d", idx);
>+    return 0;
>+}
>+
>+
> int
> qemuAssignDeviceRedirdevAlias(virDomainDefPtr def,
>                               virDomainRedirdevDefPtr redirdev,
>@@ -673,6 +685,10 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
>         if (qemuAssignDeviceTPMAlias(def->tpm, 0) < 0)
>             return -1;
>     }
>+    if (def->tpmproxy) {
>+        if (qemuAssignDeviceTPMProxyAlias(def->tpmproxy, 0) < 0)
>+            return -1;
>+    }
>     for (i = 0; i < def->nmems; i++) {
>         if (qemuAssignDeviceMemoryAlias(NULL, def->mems[i], false) < 0)
>             return -1;
>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>index bfe70ed228..0b97db7388 100644
>--- a/src/qemu/qemu_command.c
>+++ b/src/qemu/qemu_command.c
>@@ -8981,6 +8981,24 @@ qemuBuildTPMCommandLine(virCommandPtr cmd,
>     return 0;
> }
>
>+static int
>+qemuBuildTPMProxyCommandLine(virCommandPtr cmd,
>+                             const virDomainDef *def)
>+{
>+    const virDomainTPMDef *tpmproxy = def->tpmproxy;
>+
>+    if (!tpmproxy)
>+        return 0;
>+
>+    virCommandAddArg(cmd, "-device");
>+    virCommandAddArgFormat(cmd, "%s,id=%s,host-path=%s",
>+                           virDomainTPMModelTypeToString(tpmproxy->model),
>+                           tpmproxy->info.alias,
>+                           tpmproxy->data.passthrough.source.data.file.path);

The path is user-supplied and needs to be comma-escaped.

Jano

>+
>+    return 0;
>+}
>+
> static int
> qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd,
>                         virDomainSEVDefPtr sev)
>@@ -9662,6 +9680,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
>     if (qemuBuildTPMCommandLine(cmd, def, qemuCaps) < 0)
>         return NULL;
>
>+    if (qemuBuildTPMProxyCommandLine(cmd, def) < 0)
>+        return NULL;
>+
>     if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0)
>         return NULL;
>
>-- 
>2.26.2
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200514/ec10bf2e/attachment-0001.sig>


More information about the libvir-list mailing list