Re: [PATCH v9 0/6] Add TDX Guest Attestation support

Sathyanarayanan Kuppuswamy
2022-08-24T18:16:17Z

Hi,

On 8/24/22 10:12 AM, Dave Hansen wrote:
> On 7/27/22 20:44, Kuppuswamy Sathyanarayanan wrote:
>> An Intel SGX Quoting Enclave (QE), written specifically to support
>> quoting Intel TDX TDs, uses EVERIFYREPORT2, to help check the integrity
>> of the TDG.MR.REPORT. If it passes, the QE can use a certified quote
>> signing key to sign a quote containing the guest TD’s measurements and
>> the additional data being quoted.
>
> (maintainer hat firmly in place, not speaking as an Intel person here...)
>
> Let's say Intel tires of SGX and zaps it from server CPUs just like it
> did clients. Or, that Intel decides that TDX is really cool and wants
> it on SGX-free clients in addition to servers.
>
> Can the guest ABI which is introduced here work for a future attestation
> architecture that does not involve SGX?

Yes. ABI introduced here is agnostic to QE implementation. For getting a
signed Quote, the guest will pass TDREPORT with length as input and expect
signed Quote with length as output. This requirement is valid irrespective
of QE implementation(SGX/no-SGX).

As you can see below, in our ABI we pass TDREPORT with "tdx_quote_hdr" in a
buffer. Upon successful completion of the request, we expect Quote in the
same buffer with proper header details. Such header format is generic and
should work well in non-SGX environment you have mentioned as well.

Input buffer -> [tdx_quote_hdr][TDREPORT]
Output buffer -> [tdx_quote_hdr][Quote]

struct tdx_quote_hdr {
/* Quote version, filled by TD */
__u64 version;
/* Status code of Quote request, filled by VMM */
__u64 status;
/* Length of TDREPORT, filled by TD */
__u32 in_len;
/* Length of Quote, filled by VMM */
__u32 out_len;
/* Actual Quote data or TDREPORT on input */
__u64 data[0];
};

/* struct tdx_quote_req: Request to generate TD Quote using TDREPORT
*
* @buf         : Pass user data that includes TDREPORT as input. Upon
*                successful completion of IOCTL, output is copied
*                back to the same buffer.
* @len         : Length of the Quote buffer.
*/
struct tdx_quote_req {
__u64 buf; // buf with header and data
__u64 len;
};

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer