From: Sathyanarayanan Kuppuswamy <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Dionna Amalie Glaze <dionnaglaze@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, Shuah Khan <shuah@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
"H . Peter Anvin" <hpa@zytor.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Tony Luck <tony.luck@intel.com>,
Wander Lairson Costa <wander@redhat.com>,
Erdem Aktas <erdemaktas@google.com>,
Chong Cai <chongc@google.com>, Qinkun Bao <qinkun@apache.org>,
Guorui Yu <GuoRui.Yu@linux.alibaba.com>,
Du Fan <fan.du@intel.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-doc@vger.kernel.org
Subject: Re: [PATCH v2 3/3] selftests/tdx: Test GetQuote TDX attestation feature
Date: Thu, 27 Apr 2023 12:10:36 -0700 [thread overview]
Message-ID: <a418c2d3-e333-fe3d-63a5-c6e555f81fc7@linux.intel.com> (raw)
In-Reply-To: <CAAH4kHb_PAhR5jLFi2KsGku9ALNtjtxb-JO-k1ULK-Mj5mi=pw@mail.gmail.com>
Hi,
On 4/26/23 8:47 AM, Dionna Amalie Glaze wrote:
> On Wed, Apr 12, 2023 at 8:42 PM Kuppuswamy Sathyanarayanan
> <sathyanarayanan.kuppuswamy@linux.intel.com> wrote:
>>
>> In TDX guest, the second stage of the attestation process is Quote
>> generation. This process is required to convert the locally generated
>> TDREPORT into a remotely verifiable Quote. It involves sending the
>> TDREPORT data to a Quoting Enclave (QE) which will verify the
>> integerity of the TDREPORT and sign it with an attestation key.
>
> nit: integrity
>
>>
>> Intel's TDX attestation driver exposes TDX_CMD_GET_QUOTE IOCTL to
>> allow user agent get the TD Quote.
>
> nit: to get
>>
>> Add a kernel selftest module to verify the Quote generation feature.
>>
>> TD Quote generation involves following steps:
>>
>> * Get the TDREPORT data using TDX_CMD_GET_REPORT IOCTL.
>> * Embed the TDREPORT data in quote buffer and request for quote
>> generation via TDX_CMD_GET_QUOTE IOCTL request.
>> * Upon completion of the GetQuote request, check for non zero value
>> in the status field of Quote header to make sure the generated
>> quote is valid.
>>
>> Reviewed-by: Tony Luck <tony.luck@intel.com>
>> Reviewed-by: Andi Kleen <ak@linux.intel.com>
>> Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
>> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
>> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
>> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
>> ---
>> tools/testing/selftests/tdx/tdx_guest_test.c | 68 ++++++++++++++++++--
>> 1 file changed, 62 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/testing/selftests/tdx/tdx_guest_test.c b/tools/testing/selftests/tdx/tdx_guest_test.c
>> index 81d8cb88ea1a..2eccde54185b 100644
>> --- a/tools/testing/selftests/tdx/tdx_guest_test.c
>> +++ b/tools/testing/selftests/tdx/tdx_guest_test.c
>> @@ -18,6 +18,7 @@
>> #define TDX_GUEST_DEVNAME "/dev/tdx_guest"
>> #define HEX_DUMP_SIZE 8
>> #define DEBUG 0
>> +#define QUOTE_SIZE 8192
>>
>> /**
>> * struct tdreport_type - Type header of TDREPORT_STRUCT.
>> @@ -128,21 +129,29 @@ static void print_array_hex(const char *title, const char *prefix_str,
>> printf("\n");
>> }
>>
>> +/* Helper function to get TDREPORT */
>> +long get_tdreport0(int devfd, struct tdx_report_req *req)
>> +{
>> + int i;
>> +
>> + /* Generate sample report data */
>> + for (i = 0; i < TDX_REPORTDATA_LEN; i++)
>> + req->reportdata[i] = i;
>> +
>
> Shouldn't req be zeroed before populating reportdata? We wouldn't want
> uninitialized memory to leave the guest. I know this is just a test,
There are only two members in struct tdx_report_req (reportdata and tdreport).
The reportdata has already been updated here, and the tdreport will be updated
by the kernel on output. Since TDX_CMD_GET_REPORT0 IOCTL handler uses an
intermediate kernel buffer to the TDREPORT and copies the generated report back
to this user buffer, this uninitialized tdreport data never leaves the guest.
IMO, we don't need to zero it. However, because it is harmless, I am fine with
including it.
> but it's best to model good practices for anyone that might
> copy/paste.
>
>> + return ioctl(devfd, TDX_CMD_GET_REPORT0, req);
>> +}
>> +
>> TEST(verify_report)
>> {
>> struct tdx_report_req req;
>> struct tdreport *tdreport;
>> - int devfd, i;
>> + int devfd;
>>
>> devfd = open(TDX_GUEST_DEVNAME, O_RDWR | O_SYNC);
>> ASSERT_LT(0, devfd);
>>
>> - /* Generate sample report data */
>> - for (i = 0; i < TDX_REPORTDATA_LEN; i++)
>> - req.reportdata[i] = i;
>> -
>> /* Get TDREPORT */
>> - ASSERT_EQ(0, ioctl(devfd, TDX_CMD_GET_REPORT0, &req));
>> + ASSERT_EQ(0, get_tdreport0(devfd, &req));
>>
>> if (DEBUG) {
>> print_array_hex("\n\t\tTDX report data\n", "",
>> @@ -160,4 +169,51 @@ TEST(verify_report)
>> ASSERT_EQ(0, close(devfd));
>> }
>>
>> +TEST(verify_quote)
>> +{
>> + struct tdx_quote_hdr *quote_hdr;
>> + struct tdx_report_req rep_req;
>> + struct tdx_quote_req req;
>> + __u64 quote_buf_size;
>> + __u8 *quote_buf;
>> + int devfd;
>> +
>> + /* Open attestation device */
>> + devfd = open(TDX_GUEST_DEVNAME, O_RDWR | O_SYNC);
>> +
>> + ASSERT_LT(0, devfd);
>> +
>> + /* Add size for quote header */
>> + quote_buf_size = sizeof(*quote_hdr) + QUOTE_SIZE;
>> +
>> + /* Allocate quote buffer */
>> + quote_buf = malloc(quote_buf_size);
>> + ASSERT_NE(NULL, quote_buf);
>> +
>> + quote_hdr = (struct tdx_quote_hdr *)quote_buf;
>> +
>> + /* Initialize GetQuote header */
>> + quote_hdr->version = 1;
>> + quote_hdr->status = GET_QUOTE_SUCCESS;
>> + quote_hdr->in_len = TDX_REPORT_LEN;
>> + quote_hdr->out_len = 0;
>> +
>> + /* Get TDREPORT data */
>> + ASSERT_EQ(0, get_tdreport0(devfd, &rep_req));
>> +
>> + /* Fill GetQuote request */
>> + memcpy(quote_hdr->data, rep_req.tdreport, TDX_REPORT_LEN);
>> + req.buf = (__u64)quote_buf;
>> + req.len = quote_buf_size;
>> +
>> + ASSERT_EQ(0, ioctl(devfd, TDX_CMD_GET_QUOTE, &req));
>> +
>> + /* Check whether GetQuote request is successful */
>> + EXPECT_EQ(0, quote_hdr->status);
>> +
>> + free(quote_buf);
>> +
>> + ASSERT_EQ(0, close(devfd));
>> +}
>> +
>> TEST_HARNESS_MAIN
>> --
>> 2.34.1
>>
>
>
--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer
next prev parent reply other threads:[~2023-04-27 19:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-13 3:41 [PATCH v2 0/3] TDX Guest Quote generation support Kuppuswamy Sathyanarayanan
2023-04-13 3:41 ` [PATCH v2 1/3] x86/tdx: Add TDX Guest event notify interrupt support Kuppuswamy Sathyanarayanan
2023-04-14 13:34 ` Huang, Kai
2023-04-25 23:47 ` Sathyanarayanan Kuppuswamy
2023-04-26 1:59 ` Huang, Kai
2023-04-26 6:07 ` Sathyanarayanan Kuppuswamy
2023-04-28 13:50 ` Huang, Kai
2023-04-13 3:41 ` [PATCH v2 2/3] virt: tdx-guest: Add Quote generation support Kuppuswamy Sathyanarayanan
2023-04-26 15:40 ` Dionna Amalie Glaze
2023-04-27 18:27 ` Sathyanarayanan Kuppuswamy
2023-04-28 1:29 ` Dionna Amalie Glaze
2023-04-28 13:49 ` Huang, Kai
2023-05-01 6:03 ` Sathyanarayanan Kuppuswamy
2023-05-01 12:48 ` Huang, Kai
2023-05-04 7:12 ` Sathyanarayanan Kuppuswamy
2023-05-04 12:00 ` Huang, Kai
2023-05-02 22:27 ` Chong Cai
2023-04-13 3:41 ` [PATCH v2 3/3] selftests/tdx: Test GetQuote TDX attestation feature Kuppuswamy Sathyanarayanan
2023-04-26 15:47 ` Dionna Amalie Glaze
2023-04-27 19:10 ` Sathyanarayanan Kuppuswamy [this message]
2023-04-27 19:56 ` Dave Hansen
2023-04-27 19:53 ` Dave Hansen
2023-05-10 0:10 ` [PATCH v2 0/3] TDX Guest Quote generation support Erdem Aktas
2023-05-10 0:14 ` Sathyanarayanan Kuppuswamy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a418c2d3-e333-fe3d-63a5-c6e555f81fc7@linux.intel.com \
--to=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=GuoRui.Yu@linux.alibaba.com \
--cc=bp@alien8.de \
--cc=chongc@google.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=dionnaglaze@google.com \
--cc=erdemaktas@google.com \
--cc=fan.du@intel.com \
--cc=hpa@zytor.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=qinkun@apache.org \
--cc=shuah@kernel.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=wander@redhat.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox