Re: [PATCH v14 21/22] crypto: ccp: Add the SNP_{PAUSE,RESUME}_ATTESTATION commands

From: Sean Christopherson
Date: Fri Apr 26 2024 - 15:57:23 EST


On Fri, Apr 26, 2024, Michael Roth wrote:
> On Wed, Apr 24, 2024 at 05:15:40PM -0700, Sean Christopherson wrote:
> > On Sun, Apr 21, 2024, Michael Roth wrote:
> > > These commands can be used to pause servicing of guest attestation
> > > requests. This useful when updating the reported TCB or signing key with
> > > commands such as SNP_SET_CONFIG/SNP_COMMIT/SNP_VLEK_LOAD, since they may
> > > in turn require updates to userspace-supplied certificates, and if an
> > > attestation request happens to be in-flight at the time those updates
> > > are occurring there is potential for a guest to receive a certificate
> > > blob that is out of sync with the effective signing key for the
> > > attestation report.
> > >
> > > These interfaces also provide some versatility with how similar
> > > firmware/certificate update activities can be handled in the future.
> >
> > Wait, IIUC, this is using the kernel to get two userspace components to not
> > stomp over each other. Why is this the kernel's problem to solve?
>
> It's not that they are stepping on each other, but that kernel and
> userspace need to coordinate on updating 2 components whose updates need
> to be atomic from a guest perspective. Take an update to VLEK key for
> instance:
>
> 1) management gets a new VLEK endorsement key from KDS along with

What is "management"? I assume its some userspace daemon?

> associated certificate chain
> 2) management uses SNP_VLEK_LOAD to update key
> 3) management updates the certs at the path VMM will grab them
> from when the EXT_GUEST_REQUEST userspace exit is issued
>
> If an attestation request comes in after 2), but before 3), then the
> guest sees an attestation report signed with the new key, but still
> gets the old certificate.
>
> If you reverse the ordering:
>
> 1) management gets a new VLEK endorsement key from KDS along with
> associated certificate chain
> 2) management updates the certs at the path VMM will grab them
> from when the EXT_GUEST_REQUEST userspace exit is issued
> 3) management uses SNP_VLEK_LOAD to update key
>
> then an attestation request between 2) and 3) will result in the guest
> getting the new cert, but getting an attestation report signed with an old
> endorsement key.
>
> Providing a way to pause guest attestation requests prior to 2), and
> resume after 3), provides a straightforward way to make those updates
> atomic to the guest.

Assuming "management" is a userspace component, I still don't see why this
requires kernel involvement. "management" can tell VMMs to pause attestation
without having to bounce through the kernel. It doesn't even require a push
model, e.g. wrap/redirect the certs with a file that has a "pause" flag and a
sequence counter.