From: Jiri Pirko <jiri@resnulli.us>
To: Lukas Wunner <lukas@wunner.de>
Cc: Jason Gunthorpe <jgg@ziepe.ca>,
Alexey Kardashevskiy <aik@amd.com>,
Xu Yilun <yilun.xu@linux.intel.com>,
ankita@nvidia.com, linux-coco@lists.linux.dev,
linux-pci@vger.kernel.org, driver-core@lists.linux.dev,
Aaron Tomlin <atomlin@atomlin.com>,
Alistair Francis <alistair.francis@wdc.com>,
"Aneesh Kumar K.V" <aneesh.kumar@kernel.org>,
Arnd Bergmann <arnd@arndb.de>,
Bjorn Helgaas <bhelgaas@google.com>,
Daniel Gomez <da.gomez@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Dexuan Cui <decui@microsoft.com>,
Donald Hunter <donald.hunter@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jakub Kicinski <kuba@kernel.org>,
Luis Chamberlain <mcgrof@kernel.org>,
Petr Pavlu <petr.pavlu@suse.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Sami Tolvanen <samitolvanen@google.com>,
Samuel Ortiz <sameo@rivosinc.com>,
Saravana Kannan <saravanak@google.com>,
Will Deacon <will@kernel.org>,
"Fontenot, Nathan" <Nathan.Fontenot@amd.com>,
rick.p.edgecombe@intel.com, yilun.xu@intel.com,
Leon Romanovsky <leon@kernel.org>,
Jonathan Cameron <jic23@kernel.org>
Subject: Re: [PATCH 00/15] Device Evidence and Trust for PCI Security Protocol (TDISP)
Date: Fri, 4 Sep 2026 11:52:12 +0200 [thread overview]
Message-ID: <apqSAQykEK3MF9AO@FV6GYCPJ69> (raw)
In-Reply-To: <apl39vOiMPP7VloW@wunner.de>
Thu, Sep 03, 2026 at 03:36:54PM +0200, lukas@wunner.de wrote:
>[+cc Jonathan, start of thread is here:
>https://lore.kernel.org/all/20260902150125.GD2890729@ziepe.ca/
>]
>
>On Wed, Sep 02, 2026 at 12:01:25PM -0300, Jason Gunthorpe wrote:
[..]
>
>> I've asked Jiri Pirko to work on
>> the PCI evidence uAPI based on his deep netlink experience
>
>netlink isn't well suited to transport large blobs because the nlattr
>len is u16. (The len of the enclosing nlmsg is u32, which is sufficient.)
>
>Previous approaches, including the one proposed by Dan in this series,
>work around the problem by splitting the blob into a sequence of nlattrs.
>I think we should instead extend the netlink protocol with 32-bit "jumbo"
>attributes.
>
>I suggest we reserve bit 13 of nla_type as NLA_F_JUMBO and use the
>the first 4 bytes after the struct nlattr header as length (if the
>jumbo flag is set).
>
>
>A second problem is that the size of a socket buffer's linear data
>is limited. Also, copying the blob into the nlmsg is a bit wasteful
>and we'd want zero copy instead. The solution I've come up with is
>to attach the pages backing the blob as fragments to the skb.
>It's very simple, overcomes the skb size limitation and allows for
>zero-copy:
>
>https://github.com/l1k/linux/commit/6e73bb999128
>
>That commit is from January and the time I've been able to devote
>to this has since been limited as my employer prioritized various
>AER feature gaps and fixes.
>
>I worked on this for native PCI device authentication, which faces
>the same netlink blob issue as TSM-mediated authentication.
>Both should use the same uABI for evidence exposure. Additionally,
>native device authentication may be used by non-PCI buses such as
>ATA or SCSI. The uABI should work for those use cases as well.
Not sure if netlink as actually the best fit for this purpose,
for large blob transfers ioctl-based iface is probably much more
convenient. I'm working on a uapi framework that make the best of
netlink and takes it over to a fd-based ioctl. I call it CTLV, here's
a link to an early pre-RFC draft:
https://github.com/jpirko/linux_mlxsw/commits/wip_ctlv_pre_rfc_draft1/
What are the benefits over generic netlink:
- No networking in the dependency chain. No netlink sockets,
no CAP_NET_ADMIN, and no network namespace semantics to reason about
for a device that has none.
- One character device per registered instance, not one global family.
Access control is the file: udev rules, ACLs, an fd passed into
a container.
- Events per open file description, not a multicast group.
Each descriptor has its own subscriptions and queue, and an overflow
is reported in-band: the next read returns an event-overflow record
naming the first and last sequence lost and how many.
- Large payloads are referenced, not copied. A blob attribute carries
a user VA, a memfd and offset, or a dma-buf fd. Nothing big travels
through the message.
- One YAML specification, everything generated from it: kernel metadata,
UAPI headers, userspace bindings and the reference documentation.
Introspection is answered out of the same metadata the validator
enforces, so a device cannot advertise an operation it will refuse.
A checked-in ABI snapshot makes any wire change a reviewable diff.
- Family inheritance. A family inherits another's operations and fills
declared extension points. The effective schema is resolved per
device and the chain is exposed to user. A shared core with
per-driver extensions is declared once, and both attributes and
operations can be extended.
- Introspection is per-device and live. The framework answers three
queries on every device: the family chain, one entry per published
operation, and any operation's full attribute tree with its bounds
and limits.
The answer is what this device accepts right now, including what
a vendor extension added to an inherited operation and whether an op
is currently disabled, and op-changed events carry the generation
ops-dump reports, so a dump can be ordered against a change.
GETFAMILY and GETPOLICY describe a family statically - there is
no device in that model to ask.
- Fragmented queries are built in, with a consistency check.
A continuation carries the generation it started from, and if
the answer changed underneath it is refused with ESTALE,
reporting the expected and the current generation instead of
reassembling a torn reply.
- Attributes are 8-byte aligned. CTLV_ALIGNTO is 8, so
a 64-bit payload is naturally aligned and there is no per-family
padding to remember - netlink's 4-byte alignment is why
nla_put_64bit() needs an explicit NOP pad attribute.
- Cheaper round trip. A one-attribute query measured 2.6x cheaper
than a genetlink one in the same guest - a debug kernel.
- Async operations using io_uring are planned as a follow-up extension.
The framework owns validation, schema resolution, blob acquisition,
reply serialization and the event queues. All getters and putters
are generated helpers. A family implements semantics only, and
the aim is to make that hard to get wrong.
[..]
next prev parent reply other threads:[~2026-09-04 9:52 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-05 22:08 [PATCH 00/15] Device Evidence and Trust for PCI Security Protocol (TDISP) Dan Williams
2026-07-05 22:08 ` [PATCH 01/15] netlink: specs: Introduce multi-message blobs for SPDM Dan Williams
2026-07-08 11:13 ` Donald Hunter
2026-07-11 1:43 ` Dan Williams (nvidia)
2026-07-08 13:23 ` Donald Hunter
2026-07-22 1:20 ` Jakub Kicinski
2026-08-02 17:58 ` Ankit Agrawal
2026-08-03 16:35 ` Jakub Kicinski
2026-07-05 22:08 ` [PATCH 02/15] tools: ynl: Teach pyynl to handle blobs Dan Williams
2026-07-08 13:48 ` Donald Hunter
2026-07-05 22:08 ` [PATCH 03/15] tools: ynl: Teach ynl_gen_c to validate and dump 'blob' attributes Dan Williams
2026-07-05 22:08 ` [PATCH 04/15] device core: Introduce "device evidence" over netlink Dan Williams
2026-07-08 13:22 ` Donald Hunter
2026-07-05 22:08 ` [PATCH 05/15] device core: Add "device evidence" 'validate' command Dan Williams
2026-07-05 22:08 ` [PATCH 06/15] PCI/TSM: Add device evidence support Dan Williams
2026-07-08 5:00 ` Alexey Kardashevskiy
2026-07-08 18:25 ` Dan Williams (nvidia)
2026-07-05 22:08 ` [PATCH 07/15] modules: Document the global async_probe parameter Dan Williams
2026-07-17 13:44 ` Nikolay Borisov
2026-07-05 22:08 ` [PATCH 08/15] device core: Initial device trust infrastructure Dan Williams
2026-07-06 13:45 ` Jason Gunthorpe
2026-07-05 22:08 ` [PATCH 09/15] PCI, device core: Move "untrusted" concept to DEVICE_TRUST_ADVERSARY Dan Williams
2026-07-06 13:49 ` Jason Gunthorpe
2026-07-07 13:04 ` Robin Murphy
2026-07-05 22:08 ` [PATCH 10/15] PCI/TSM: Add device interface security LOCKED support Dan Williams
2026-07-05 22:08 ` [PATCH 11/15] PCI/TSM: Add device interface security RUN support Dan Williams
2026-07-05 22:08 ` [PATCH 12/15] PCI/TSM: Add device interface security DMA enable/disable Dan Williams
2026-07-05 22:08 ` [PATCH 13/15] PCI, device core: Add private memory access for DEVICE_TRUST_TCB Dan Williams
2026-07-06 12:42 ` Aneesh Kumar K.V
2026-07-08 18:06 ` Dan Williams (nvidia)
2026-07-08 18:10 ` Aneesh Kumar K.V
2026-07-09 6:32 ` Alexey Kardashevskiy
2026-07-09 7:38 ` Alexey Kardashevskiy
2026-07-05 22:08 ` [PATCH 14/15] PCI/TSM: Create MMIO descriptors via TDISP Report Dan Williams
2026-07-08 9:49 ` Alexey Kardashevskiy
2026-07-05 22:08 ` [PATCH 15/15] PCI/TSM: Add relative MMIO offset support? Dan Williams
2026-07-08 2:25 ` Alexey Kardashevskiy
2026-07-08 18:05 ` Dan Williams (nvidia)
2026-07-06 12:51 ` [PATCH 00/15] Device Evidence and Trust for PCI Security Protocol (TDISP) Jason Gunthorpe
2026-07-06 20:55 ` Dan Williams (nvidia)
2026-07-07 12:43 ` Jason Gunthorpe
2026-07-08 0:12 ` Dan Williams (nvidia)
2026-07-08 14:31 ` Jason Gunthorpe
2026-07-09 2:45 ` Dan Williams (nvidia)
2026-07-09 13:36 ` Jason Gunthorpe
2026-07-15 9:04 ` Alexey Kardashevskiy
2026-07-16 18:51 ` Jason Gunthorpe
2026-07-28 8:20 ` Alexey Kardashevskiy
2026-07-28 23:29 ` Jason Gunthorpe
2026-08-04 1:48 ` Xu Yilun
2026-08-04 20:33 ` Ankit Agrawal
2026-08-05 17:43 ` Xu Yilun
2026-08-05 0:55 ` Jason Gunthorpe
2026-09-02 2:12 ` Xu Yilun
2026-09-02 2:20 ` Alexey Kardashevskiy
2026-09-02 7:28 ` Leon Romanovsky
2026-09-02 9:30 ` Xu Yilun
2026-09-02 15:01 ` Jason Gunthorpe
2026-09-03 2:21 ` Alexey Kardashevskiy
2026-09-03 5:59 ` Aneesh Kumar K.V
2026-09-03 6:51 ` Leon Romanovsky
2026-09-03 8:11 ` Ankit Agrawal
2026-09-03 11:04 ` Ankit Agrawal
2026-09-03 13:36 ` Lukas Wunner
2026-09-03 15:05 ` Dave Hansen
2026-09-03 17:53 ` Jason Gunthorpe
2026-09-03 20:02 ` Jonathan Cameron
2026-09-04 9:52 ` Jiri Pirko [this message]
2026-07-29 1:57 ` Ankit Agrawal
2026-08-02 18:12 ` Ankit Agrawal
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=apqSAQykEK3MF9AO@FV6GYCPJ69 \
--to=jiri@resnulli.us \
--cc=Nathan.Fontenot@amd.com \
--cc=aik@amd.com \
--cc=alistair.francis@wdc.com \
--cc=aneesh.kumar@kernel.org \
--cc=ankita@nvidia.com \
--cc=arnd@arndb.de \
--cc=atomlin@atomlin.com \
--cc=bhelgaas@google.com \
--cc=da.gomez@kernel.org \
--cc=dakr@kernel.org \
--cc=decui@microsoft.com \
--cc=donald.hunter@gmail.com \
--cc=driver-core@lists.linux.dev \
--cc=gregkh@linuxfoundation.org \
--cc=jgg@ziepe.ca \
--cc=jic23@kernel.org \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-pci@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=mcgrof@kernel.org \
--cc=petr.pavlu@suse.com \
--cc=rafael@kernel.org \
--cc=rick.p.edgecombe@intel.com \
--cc=robin.murphy@arm.com \
--cc=sameo@rivosinc.com \
--cc=samitolvanen@google.com \
--cc=saravanak@google.com \
--cc=will@kernel.org \
--cc=yilun.xu@intel.com \
--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