qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/9] backends/confidential-guest-support: Add IGVM file param


From: Roy Hopkins
Subject: Re: [PATCH 2/9] backends/confidential-guest-support: Add IGVM file parameter
Date: Wed, 20 Mar 2024 14:44:17 +0000
User-agent: Evolution 3.50.2

On Tue, 2024-03-19 at 16:10 +0100, Stefano Garzarella wrote:
> On Tue, Feb 27, 2024 at 02:50:08PM +0000, Roy Hopkins wrote:
> > In order to add support for parsing IGVM files for secure virtual
> > machines, a the path to an IGVM file needs to be specified as
> > part of the guest configuration. It makes sense to add this to
> > the ConfidentialGuestSupport object as this is common to all secure
> > virtual machines that potentially could support IGVM based
> > configuration.
> > 
> > This patch allows the filename to be configured via the QEMU
> > object model in preparation for subsequent patches that will read and
> > parse the IGVM file.
> > 
> > Signed-off-by: Roy Hopkins <roy.hopkins@suse.com>
> > ---
> > backends/confidential-guest-support.c     | 21 +++++++++++++++++++++
> > include/exec/confidential-guest-support.h |  9 +++++++++
> > qapi/qom.json                             | 13 +++++++++++++
> > qemu-options.hx                           |  8 +++++++-
> > 4 files changed, 50 insertions(+), 1 deletion(-)
> > 
> > diff --git a/backends/confidential-guest-support.c b/backends/confidential-
> > guest-support.c
> > index 052fde8db0..da436fb736 100644
> > --- a/backends/confidential-guest-support.c
> > +++ b/backends/confidential-guest-support.c
> > @@ -20,8 +20,29 @@ OBJECT_DEFINE_ABSTRACT_TYPE(ConfidentialGuestSupport,
> >                             CONFIDENTIAL_GUEST_SUPPORT,
> >                             OBJECT)
> > 
> > +#if defined(CONFIG_IGVM)
> > +static char *get_igvm(Object *obj, Error **errp)
> > +{
> > +    ConfidentialGuestSupport *cgs = CONFIDENTIAL_GUEST_SUPPORT(obj);
> > +    return g_strdup(cgs->igvm_filename);
> > +}
> > +
> > +static void set_igvm(Object *obj, const char *value, Error **errp)
> > +{
> > +    ConfidentialGuestSupport *cgs = CONFIDENTIAL_GUEST_SUPPORT(obj);
> > +    g_free(cgs->igvm_filename);
> > +    cgs->igvm_filename = g_strdup(value);
> > +}
> > +#endif
> > +
> > static void confidential_guest_support_class_init(ObjectClass *oc, void
> > *data)
> > {
> > +#if defined(CONFIG_IGVM)
> > +    object_class_property_add_str(oc, "igvm-file",
> > +        get_igvm, set_igvm);
> > +    object_class_property_set_description(oc, "igvm-file",
> > +        "Set the IGVM filename to use");
> > +#endif
> > }
> > 
> > static void confidential_guest_support_init(Object *obj)
> > diff --git a/include/exec/confidential-guest-support.h
> > b/include/exec/confidential-guest-support.h
> > index ba2dd4b5df..b08ad8de4d 100644
> > --- a/include/exec/confidential-guest-support.h
> > +++ b/include/exec/confidential-guest-support.h
> > @@ -51,6 +51,15 @@ struct ConfidentialGuestSupport {
> >      * so 'ready' is not set, we'll abort.
> >      */
> >     bool ready;
> > +
> > +#if defined(CONFIG_IGVM)
> > +    /*
> > +     * igvm_filename: Optional filename that specifies a file that contains
> > +     *                the configuration of the guest in Isolated Guest
> > +     *                Virtual Machine (IGVM) format.
> > +     */
> > +    char *igvm_filename;
> > +#endif
> > };
> > 
> > typedef struct ConfidentialGuestSupportClass {
> > diff --git a/qapi/qom.json b/qapi/qom.json
> > index 2a6e49365a..570bdd7d55 100644
> > --- a/qapi/qom.json
> > +++ b/qapi/qom.json
> > @@ -859,6 +859,18 @@
> >   'base': 'RngProperties',
> >   'data': { '*filename': 'str' } }
> > 
> > +##
> > +# @ConfidentialGuestProperties:
> > +#
> > +# Properties common to objects that are derivatives of confidential-guest-
> > support.
> > +#
> > +# @igvm-file: IGVM file to use to configure guest (default: none)
> > +#
> > +# Since: 8.2
> 
> Should it be 9.0 or maybe 9.1 ?

Good question. Obviously it is hard to predict which version this will
potentially land in. I can update it to 9.1 because it is unlikely to be in any
version prior to this, but what is the normal convention for choosing a version
number here?
> 
> > +##
> > +{ 'struct': 'ConfidentialGuestProperties',
> > +  'data': { '*igvm-file': 'str' } }
> > +
> > ##
> > # @SevGuestProperties:
> > #
> > @@ -886,6 +898,7 @@
> > # Since: 2.12
> > ##
> > { 'struct': 'SevGuestProperties',
> > +  'base': 'ConfidentialGuestProperties',
> >   'data': { '*sev-device': 'str',
> >             '*dh-cert-file': 'str',
> >             '*session-file': 'str',
> > diff --git a/qemu-options.hx b/qemu-options.hx
> > index 9be1e5817c..49d9226e35 100644
> > --- a/qemu-options.hx
> > +++ b/qemu-options.hx
> > @@ -5640,7 +5640,7 @@ SRST
> >                  -object secret,id=sec0,keyid=secmaster0,format=base64,\\
> >                      data=$SECRET,iv=$(<iv.b64)
> > 
> > -    ``-object sev-guest,id=id,cbitpos=cbitpos,reduced-phys-bits=val,[sev-
> > device=string,policy=policy,handle=handle,dh-cert-file=file,session-
> > file=file,kernel-hashes=on|off]``
> > +    ``-object sev-guest,id=id,cbitpos=cbitpos,reduced-phys-bits=val,[sev-
> > device=string,policy=policy,handle=handle,dh-cert-file=file,session-
> > file=file,kernel-hashes=on|off,igvm-file=file]``
> >         Create a Secure Encrypted Virtualization (SEV) guest object,
> >         which can be used to provide the guest memory encryption support
> >         on AMD processors.
> > @@ -5684,6 +5684,12 @@ SRST
> >         cmdline to a designated guest firmware page for measured Linux
> >         boot with -kernel. The default is off. (Since 6.2)
> > 
> > +        The ``igvm-file`` is an optional parameter that, when specified,
> > +        allows an Independent Guest Virtual Machine (IGVM) file to be
> > +        specified that configures the secure virtual machine and can
> > +        include, for example, an SVSM module, system firmware, initial
> > +        boot state, etc.
> > +
> >         e.g to launch a SEV guest
> > 
> >         .. parsed-literal::
> > -- 
> > 2.43.0
> > 
> > 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]