[libvirt PATCH 4/6] qemu: report new launch security parameters

Daniel P. Berrangé posted 6 patches 4 years, 2 months ago
There is a newer version of this series
[libvirt PATCH 4/6] qemu: report new launch security parameters
Posted by Daniel P. Berrangé 4 years, 2 months ago
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/qemu/qemu_driver.c | 41 +++++++++++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5bacf73003..e1296d3723 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19977,14 +19977,19 @@ qemuNodeGetSEVInfo(virConnectPtr conn,
 
 
 static int
-qemuDomainGetSEVMeasurement(virQEMUDriver *driver,
-                            virDomainObj *vm,
-                            virTypedParameterPtr *params,
-                            int *nparams,
-                            unsigned int flags)
+qemuDomainGetSEVInfo(virQEMUDriver *driver,
+                     virDomainObj *vm,
+                     virTypedParameterPtr *params,
+                     int *nparams,
+                     unsigned int flags)
 {
     int ret = -1;
+    int rv;
     g_autofree char *tmp = NULL;
+    unsigned int apiMajor = 0;
+    unsigned int apiMinor = 0;
+    unsigned int buildID = 0;
+    unsigned int policy = 0;
     int maxpar = 0;
 
     virCheckFlags(VIR_TYPED_PARAM_STRING_OKAY, -1);
@@ -20006,10 +20011,34 @@ qemuDomainGetSEVMeasurement(virQEMUDriver *driver,
     if (!tmp)
         goto endjob;
 
+    qemuDomainObjEnterMonitor(driver, vm);
+    rv = qemuMonitorGetSEVInfo(QEMU_DOMAIN_PRIVATE(vm)->mon,
+                               &apiMajor, &apiMinor, &buildID, &policy);
+    qemuDomainObjExitMonitor(driver, vm);
+
+    if (rv < 0)
+        goto endjob;
+
     if (virTypedParamsAddString(params, nparams, &maxpar,
                                 VIR_DOMAIN_LAUNCH_SECURITY_SEV_MEASUREMENT,
                                 tmp) < 0)
         goto endjob;
+    if (virTypedParamsAddUInt(params, nparams, &maxpar,
+                              VIR_DOMAIN_LAUNCH_SECURITY_SEV_API_MAJOR,
+                              apiMajor) < 0)
+        goto endjob;
+    if (virTypedParamsAddUInt(params, nparams, &maxpar,
+                              VIR_DOMAIN_LAUNCH_SECURITY_SEV_API_MINOR,
+                              apiMinor) < 0)
+        goto endjob;
+    if (virTypedParamsAddUInt(params, nparams, &maxpar,
+                              VIR_DOMAIN_LAUNCH_SECURITY_SEV_BUILD_ID,
+                              buildID) < 0)
+        goto endjob;
+    if (virTypedParamsAddUInt(params, nparams, &maxpar,
+                              VIR_DOMAIN_LAUNCH_SECURITY_SEV_POLICY,
+                              policy) < 0)
+        goto endjob;
 
     ret = 0;
 
@@ -20037,7 +20066,7 @@ qemuDomainGetLaunchSecurityInfo(virDomainPtr domain,
 
     if (vm->def->sec &&
         vm->def->sec->sectype == VIR_DOMAIN_LAUNCH_SECURITY_SEV) {
-        if (qemuDomainGetSEVMeasurement(driver, vm, params, nparams, flags) < 0)
+        if (qemuDomainGetSEVInfo(driver, vm, params, nparams, flags) < 0)
             goto cleanup;
     }
 
-- 
2.33.1

Re: [libvirt PATCH 4/6] qemu: report new launch security parameters
Posted by Peter Krempa 4 years, 2 months ago
On Wed, Dec 08, 2021 at 18:44:32 +0000, Daniel P. Berrangé wrote:
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---

https://bugzilla.redhat.com/show_bug.cgi?id=2030435

Also a rather sparse commit message. For justification you can use what
you've put into the comment for the function calling query-sev.

>  src/qemu/qemu_driver.c | 41 +++++++++++++++++++++++++++++++++++------
>  1 file changed, 35 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 5bacf73003..e1296d3723 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -19977,14 +19977,19 @@ qemuNodeGetSEVInfo(virConnectPtr conn,
>  
>  
>  static int
> -qemuDomainGetSEVMeasurement(virQEMUDriver *driver,
> -                            virDomainObj *vm,
> -                            virTypedParameterPtr *params,
> -                            int *nparams,
> -                            unsigned int flags)
> +qemuDomainGetSEVInfo(virQEMUDriver *driver,
> +                     virDomainObj *vm,
> +                     virTypedParameterPtr *params,
> +                     int *nparams,
> +                     unsigned int flags)
>  {
>      int ret = -1;
> +    int rv;
>      g_autofree char *tmp = NULL;
> +    unsigned int apiMajor = 0;
> +    unsigned int apiMinor = 0;
> +    unsigned int buildID = 0;
> +    unsigned int policy = 0;
>      int maxpar = 0;
>  
>      virCheckFlags(VIR_TYPED_PARAM_STRING_OKAY, -1);
> @@ -20006,10 +20011,34 @@ qemuDomainGetSEVMeasurement(virQEMUDriver *driver,
>      if (!tmp)
>          goto endjob;
>  
> +    qemuDomainObjEnterMonitor(driver, vm);
> +    rv = qemuMonitorGetSEVInfo(QEMU_DOMAIN_PRIVATE(vm)->mon,
> +                               &apiMajor, &apiMinor, &buildID, &policy);
> +    qemuDomainObjExitMonitor(driver, vm);

You don't have to enter monitor twice to do two calls.

> +
> +    if (rv < 0)
> +        goto endjob;
> +
>      if (virTypedParamsAddString(params, nparams, &maxpar,
>                                  VIR_DOMAIN_LAUNCH_SECURITY_SEV_MEASUREMENT,
>                                  tmp) < 0)

Once you merge the monitor blocks:

Reviewed-by: Peter Krempa <pkrempa@redhat.com>