From: Jason Gunthorpe <jgg@nvidia.com>
To: Dave Jiang <dave.jiang@intel.com>
Cc: "Reshetova, Elena" <elena.reshetova@intel.com>,
Xu Yilun <yilun.xu@linux.intel.com>,
"Aneesh Kumar K.V" <aneesh.kumar@kernel.org>,
"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
Jiri Pirko <jiri@resnulli.us>,
"Tian, Kevin" <kevin.tian@intel.com>,
Alexey Kardashevskiy <aik@amd.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Steven Price <steven.price@arm.com>,
Kiryl Shutsemau <kas@kernel.org>,
"Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Jonathan Cameron <jic23@kernel.org>,
Bjorn Helgaas <bhelgaas@google.com>,
Ashish Kalra <ashish.kalra@amd.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
John Allen <john.allen@amd.com>, Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
"patches@lists.linux.dev" <patches@lists.linux.dev>
Subject: Re: [RFC PATCH v1 10/11] virt: coco: arm-cca-host: Publish slot zero and establish streams after acceptance
Date: Mon, 9 Nov 2026 14:53:15 -0400 [thread overview]
Message-ID: <20261109185315.GS770409@nvidia.com> (raw)
In-Reply-To: <2b89b830-f1e4-4304-93ee-40287a4b5b2d@intel.com>
On Mon, Nov 09, 2026 at 10:37:14AM -0700, Dave Jiang wrote:
> One thing on TDX is that TDH.SPDM.CONNECT also runs a
> GET_MEASUREMENTS of its own during the connect, and the kernel
> doesn't choose its nonce. The kernel wouldn't hand that one to
> userspace. Measurements only come out through the two flows, with a
> user nonce.
Why? Seems like another wasted operation..
> That works for TDX. tdx-host's relay is one function today. It takes
> the module's request from a page shared with the module and calls
> pci_tsm_doe_transfer(), so att_spdm_doe_exchange() drops in there.
Yeah, it looks like it works for everyone.
I sketched out this library, and it is basically half or more of the
in-kernel SPDM in just a different form. Basically all the reply
message processing and de-framing abstracted into something a little
different.
So in terms of *net* code needed it seems like very little
But it brings forward "rust spdm" or something in a new form as a
pre-condition to do the TSMs. Which is annoying for sure.
> I tried a quick version of the capture in a test hack with the TDX
> Module It rebuilt the VCA, slot 0's chain and
> KEY_EXCHANGE/KEY_EXCHANGE_RSP from the relayed messages, and the
> kernel's own check of the KEY_EXCHANGE_RSP signature passed. Agreed
> it's more of a debugging aid. Two things I encountered:
So you (AI'd?) something basic up to do the captures and showed that
indeed the right data comes through and the general notion is OK?
That's great, it matches what all the analysis points to. I could find
no blocking issue on this idea.
> - The DOE payloads carry dword padding, so the capture has to trim
> each message to its SPDM length before hashing. KEY_EXCHANGE was
> 160 bytes as a DOE payload and 158 as an SPDM message.
Yeah, I couldn't belive it when my AI pointed to this. Nobody thought
to preserve an actual length so any SPDM over DOE implementation needs
to be very, very painfully calculate a length from the message content
and algorith negotiation.
My AI predicts 1000-2000 lines of code very careful spec derived code
just to remove this padding. Such a big spec mistake.
> - The chain hash in the KEY_EXCHANGE_RSP transcript is over the
> whole SPDM chain structure (length, reserved, root hash,
> certificates), not just the DER certificates. That's how the
> device and the TDX Module compute it.
Definitely, it would need to capture the certificate stuff in just the
right way.
The optional chunking features are a bit tricky, but I don't think a
1.2 only implementation needs them. They seem necesary for future
post-quantum.
This also formalizes the version locking: the TSM FW cannot use a SPDM
version that the kernel does not understand. I think this was already
basically true, trying to do the 1.3 multi-slot flow is not going to
work out with out kernel support to move the additional data. Maybe
nobody noticed, but with this scheme it would be really formal.
In practice this means all the TSMs will need the kernel to tell it
what SPDM versions it can go up to.
So I'm a little bit stuck here. Some thoughts:
1) I think this removes alot of code from the TSM drivers. All this
stuff they have to go back and get the data after the fact, or the
thing that is almost like this in RMM, goes away. The TSM drivers
are very slim, just run their communicate loops.
2) Clear uniform path to 1.3, stop after GET_DIGESTS, let userspace
inspect the certificates, continue with the slot. Again drivers can
be super simple, just need to pause at the right point in the
sequence.
3) The data collected and presented to userspace is perfectly uniform
governed only by the SPDM specification. There is a clear path to
adopt newer versions in the kernel with in-kernel SPDM that
instantly with nearly no-code works with all the TSM drivers.
4) This is about half of in-kernel SPDM, the receive buffer
reassembly, certificate chain reassembly, x509, padding stripping.
Each a complicated topic on its own. We always imagined having
in-kernel SPDM, so I view this as effectively free code - contigent
on organizing the in-kernel SPDM implementation in a properly
modular way.
5) Without AI this looks actually fairly scary. I can see why people
wanted to avoid it with different schemes to have the TSM do some
of the work. Yet we planned to do it anyhow for in-kernel SPDM so..
6) With AI this is probably a weeks work I suppose to really expertly
polish and make excellent tests.
7) There is clear overlap with Alistair's work, I don't have a sense
right now how close some of the parts in that series are to fitting
this shape.
I will look more closely at Alistair's series to see how close it is
already.
But, I am strongly tempted to make a draft placeholder in C with AI as
a way to get alignment and try it out. Something we can throw out if a
Rust version comes along.
Jason
next prev parent reply other threads:[~2026-11-09 18:55 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 15:26 [RFC PATCH v1 00/11] PCI/TSM: Add CTLV attestation Aneesh Kumar K.V (Arm)
2026-10-28 15:26 ` [RFC PATCH v1 01/11] attestation: Restrict inherited operations per instance Aneesh Kumar K.V (Arm)
2026-10-30 13:29 ` Jiri Pirko
2026-10-28 15:26 ` [RFC PATCH v1 02/11] attestation: Filter evidence objects " Aneesh Kumar K.V (Arm)
2026-10-30 13:44 ` Jiri Pirko
2026-10-31 6:24 ` Aneesh Kumar K.V
2026-11-02 19:14 ` Jiri Pirko
2026-10-28 15:26 ` [RFC PATCH v1 03/11] attestation: Enter secure operation when evidence is accepted Aneesh Kumar K.V (Arm)
2026-10-30 13:51 ` Jiri Pirko
2026-10-30 15:36 ` Jason Gunthorpe
2026-10-31 4:09 ` Aneesh Kumar K.V
2026-11-02 11:28 ` Jiri Pirko
2026-10-28 15:26 ` [RFC PATCH v1 04/11] attestation: Bind object selection to accepted evidence snapshots Aneesh Kumar K.V (Arm)
2026-10-28 15:26 ` [RFC PATCH v1 05/11] attestation: Make the evidence-get challenge attribute optional Aneesh Kumar K.V (Arm)
2026-10-28 15:26 ` [RFC PATCH v1 06/11] PCI/TSM: Describe the PCI attestation control family Aneesh Kumar K.V (Arm)
2026-10-30 14:01 ` Jiri Pirko
2026-10-30 15:43 ` Jason Gunthorpe
2026-11-02 12:45 ` Jiri Pirko
2026-11-03 15:45 ` Jason Gunthorpe
2026-11-04 9:21 ` Jiri Pirko
2026-11-04 14:00 ` Jason Gunthorpe
2026-10-31 4:05 ` Aneesh Kumar K.V
2026-11-02 11:50 ` Jiri Pirko
2026-11-03 15:35 ` Jason Gunthorpe
2026-10-31 4:22 ` Aneesh Kumar K.V
2026-11-02 11:30 ` Jiri Pirko
2026-11-03 15:39 ` Jason Gunthorpe
2026-10-28 15:26 ` [RFC PATCH v1 07/11] attestation: Add attestation helpers for PCI/TSM integration Aneesh Kumar K.V (Arm)
2026-10-28 15:26 ` [RFC PATCH v1 08/11] PCI/TSM: Bind CTLV attestation to connected and locked contexts Aneesh Kumar K.V (Arm)
2026-10-28 22:56 ` Dave Jiang
2026-10-29 5:30 ` Aneesh Kumar K.V
2026-10-29 12:41 ` Jason Gunthorpe
2026-10-30 14:04 ` Jiri Pirko
2026-10-30 14:08 ` Jiri Pirko
2026-10-30 15:39 ` Jason Gunthorpe
2026-11-02 12:11 ` Jiri Pirko
2026-11-03 15:41 ` Jason Gunthorpe
2026-10-28 15:26 ` [RFC PATCH v1 09/11] crypto/ccp: Defer SEV-TIO link setup until evidence acceptance Aneesh Kumar K.V (Arm)
2026-11-06 7:47 ` Alexey Kardashevskiy
2026-11-06 13:14 ` Aneesh Kumar K.V
2026-11-06 14:21 ` Jason Gunthorpe
2026-11-09 10:03 ` Alexey Kardashevskiy
2026-10-28 15:26 ` [RFC PATCH v1 10/11] virt: coco: arm-cca-host: Publish slot zero and establish streams after acceptance Aneesh Kumar K.V (Arm)
2026-10-29 16:56 ` Dave Jiang
2026-10-29 17:10 ` Jason Gunthorpe
2026-10-30 9:58 ` Reshetova, Elena
2026-10-30 13:15 ` Jason Gunthorpe
2026-10-31 3:47 ` Aneesh Kumar K.V
2026-11-02 10:11 ` Reshetova, Elena
2026-11-02 17:26 ` Jason Gunthorpe
2026-11-03 12:01 ` Reshetova, Elena
2026-11-03 15:16 ` Jason Gunthorpe
2026-11-04 8:03 ` Xu Yilun
2026-11-04 9:49 ` Reshetova, Elena
2026-11-04 13:41 ` Jason Gunthorpe
2026-11-04 16:54 ` Dave Jiang
2026-11-06 15:53 ` Dave Jiang
2026-11-06 19:30 ` Jason Gunthorpe
2026-11-06 22:39 ` Dave Jiang
2026-11-08 18:33 ` Jason Gunthorpe
2026-11-09 10:55 ` Reshetova, Elena
2026-11-09 13:47 ` Jason Gunthorpe
2026-11-09 17:37 ` Dave Jiang
2026-11-09 18:53 ` Jason Gunthorpe [this message]
2026-11-09 20:54 ` Dave Jiang
2026-11-09 23:40 ` Jason Gunthorpe
2026-11-10 13:15 ` Reshetova, Elena
2026-11-10 14:20 ` Jason Gunthorpe
2026-11-10 1:40 ` Alistair
2026-11-10 15:07 ` Jason Gunthorpe
2026-11-10 5:32 ` Alexey Kardashevskiy
2026-11-10 12:52 ` Jason Gunthorpe
2026-11-11 9:03 ` Alexey Kardashevskiy
2026-11-10 20:07 ` Jason Gunthorpe
2026-11-04 9:03 ` Reshetova, Elena
2026-11-04 13:48 ` Jason Gunthorpe
2026-11-06 8:24 ` Aneesh Kumar K.V
2026-11-06 12:49 ` Reshetova, Elena
2026-11-06 15:53 ` Aneesh Kumar K.V
2026-11-06 18:54 ` Jason Gunthorpe
2026-11-03 16:31 ` Aneesh Kumar K.V
2026-11-03 17:56 ` Jason Gunthorpe
2026-11-02 10:05 ` Reshetova, Elena
2026-11-02 10:22 ` Reshetova, Elena
2026-11-02 17:37 ` Jason Gunthorpe
2026-10-28 15:26 ` [RFC PATCH v1 11/11] virt: coco: arm-cca-guest: Refresh selected evidence against trusted digests Aneesh Kumar K.V (Arm)
2026-10-30 12:34 ` [RFC PATCH v1 00/11] PCI/TSM: Add CTLV attestation Xu Yilun
2026-10-30 15:32 ` Jason Gunthorpe
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=20261109185315.GS770409@nvidia.com \
--to=jgg@nvidia.com \
--cc=aik@amd.com \
--cc=aneesh.kumar@kernel.org \
--cc=ashish.kalra@amd.com \
--cc=bhelgaas@google.com \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=dave.jiang@intel.com \
--cc=elena.reshetova@intel.com \
--cc=jic23@kernel.org \
--cc=jiri@resnulli.us \
--cc=john.allen@amd.com \
--cc=kas@kernel.org \
--cc=kevin.tian@intel.com \
--cc=linux-coco@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=patches@lists.linux.dev \
--cc=rick.p.edgecombe@intel.com \
--cc=steven.price@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=thomas.lendacky@amd.com \
--cc=will@kernel.org \
--cc=yilun.xu@linux.intel.com \
/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