From: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
To: Jiri Pirko <jiri@resnulli.us>
Cc: linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-api@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org,
linux-doc@vger.kernel.org, jgg@ziepe.ca, david.quigley@intel.com,
lukas@wunner.de, ksinyuk@kernel.org, rodrigo.vivi@intel.com,
cedric.xing@intel.com, sameo@meta.com, drdeeglaze@gmail.com,
James.Bottomley@HansenPartnership.com, aik@amd.com,
jpiotrowski@nvidia.com, qinkun@google.com, pgonda@google.com,
jic23@kernel.org, alistair.francis@wdc.com, ankita@nvidia.com,
suzuki.poulose@arm.com, kas@kernel.org,
rick.p.edgecombe@intel.com, elena.reshetova@intel.com,
dave.hansen@linux.intel.com,
sathyanarayanan.kuppuswamy@linux.intel.com, peter.fang@intel.com
Subject: Re: [PATCH RFC 15/20] attestation: Prepare provider and instance core
Date: Thu, 29 Oct 2026 20:50:20 +0200 [thread overview]
Message-ID: <auOVbGYJjIQTN53z@MjU3Nj> (raw)
In-Reply-To: <20261015145053.3664509-16-jiri@resnulli.us>
On Thu, Oct 15, 2026 at 04:50:48PM +0200, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> Add provider validation, instance registration and lifecycle management for
> the attestation family.
>
> The provider descriptor is one immutable evidence and MR contract; journal
> storage follows in the next patch. The core object can be compile-checked
> here. CONFIG_ATTESTATION remains unwired until the CTLV handlers land.
>
> Assisted-by: Cursor: GPT-5.6 Sol
> Assisted-by: Cursor: Claude Opus 5.5
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> ---
> Documentation/driver-api/attestation.rst | 36 +++
> Documentation/driver-api/index.rst | 1 +
> MAINTAINERS | 2 +
> drivers/attestation/Kconfig | 12 +
> drivers/attestation/Makefile | 4 +
> drivers/attestation/core/core.c | 280 +++++++++++++++++++++++
> drivers/attestation/core/internal.h | 35 +++
> include/linux/attestation.h | 138 +++++++++++
> 8 files changed, 508 insertions(+)
> create mode 100644 Documentation/driver-api/attestation.rst
> create mode 100644 drivers/attestation/Kconfig
> create mode 100644 drivers/attestation/Makefile
> create mode 100644 drivers/attestation/core/core.c
> create mode 100644 drivers/attestation/core/internal.h
> create mode 100644 include/linux/attestation.h
[...]
> diff --git a/include/linux/attestation.h b/include/linux/attestation.h
> new file mode 100644
> index 000000000000..0fd806ea77d8
> --- /dev/null
> +++ b/include/linux/attestation.h
> @@ -0,0 +1,138 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +#ifndef _LINUX_ATTESTATION_H
> +#define _LINUX_ATTESTATION_H
> +
> +#include <crypto/hash.h>
> +#include <linux/types.h>
> +
> +#include <uapi/linux/ctlv_attestation_gen.h>
> +#include <uapi/linux/hash_info.h>
> +
> +struct attestation;
> +struct ctlv_blob;
> +
> +/**
> + * struct attestation_digest - One MR digest.
> + * @algorithm: hash algorithm
> + * @data: digest bytes
> + */
> +struct attestation_digest {
> + enum hash_algo algorithm;
> + u8 data[HASH_MAX_DIGESTSIZE];
> +};
> +
> +/**
> + * struct attestation_digest_set - Digests ordered as the MR algorithms.
> + * @values_count: number of digests
> + * @values: digest array
> + */
> +struct attestation_digest_set {
> + size_t values_count;
> + struct attestation_digest *values;
> +};
> +
> +/**
> + * struct attestation_mr_props - Immutable MR properties.
> + * @id: provider-unique MR ID
> + * @name: MR name
> + * @algorithms: ordered hash algorithms
Why do these need to be sorted? Is it just to make indexing easier?
I see that the number of algorithms is also checked on extending. Does
it mean that a situation when not all PCR banks are extended at the same
time is considered an invalid one? That may be a problem at least for
DRTM which may extend only one bank even if several are active.
> + * @algorithms_count: number of algorithms
> + * @has_register_index: whether @register_index is valid
> + * @register_index: native register index
> + * @readable: MR can be read
> + * @extendable: MR can be extended
At least with TPMs, whether a PCR can be extended depends on locality,
so this isn't necessarily a static property. Is this flag expected to
always be accurate or it would be OK for a provider to declare an
extendable MR but then deny doing it?
> + */
> +struct attestation_mr_props {
> + unsigned int id;
> + const char *name;
> + const enum hash_algo *algorithms;
> + size_t algorithms_count;
> + bool has_register_index;
> + unsigned int register_index;
> + bool readable;
> + bool extendable;
> +};
> +
> +/**
> + * struct attestation_evidence_supported_object - Evidence output description.
> + * @format: evidence format name
> + * @max_length: maximum output bytes
> + * @binds_mrs: evidence validity depends on MR state
> + */
> +struct attestation_evidence_supported_object {
> + const char *format;
> + size_t max_length;
> + bool binds_mrs;
> +};
> +
> +/**
> + * struct attestation_evidence_caps - Immutable evidence capabilities.
> + * @min_challenge_length: minimum challenge bytes
> + * @max_challenge_length: maximum challenge bytes
> + * @max_total_output_length: maximum bytes across all objects
> + * @objects: supported evidence objects
> + * @objects_count: number of objects
> + */
> +struct attestation_evidence_caps {
> + size_t min_challenge_length;
> + size_t max_challenge_length;
> + size_t max_total_output_length;
> + const struct attestation_evidence_supported_object *objects;
> + size_t objects_count;
> +};
> +
> +/**
> + * struct attestation_evidence_object_request - One resolved output object.
> + * @supported_object: matching capability entry
> + * @output: resolved output blob
> + */
> +struct attestation_evidence_object_request {
> + const struct attestation_evidence_supported_object *supported_object;
> + struct ctlv_blob *output;
> +};
> +
> +/**
> + * struct attestation_evidence_request - Validated evidence request.
> + * @challenge: challenge bytes
> + * @challenge_length: challenge length
> + * @objects: requested output objects
> + * @objects_count: number of objects
> + */
> +struct attestation_evidence_request {
> + const u8 *challenge;
> + size_t challenge_length;
> + const struct attestation_evidence_object_request *objects;
> + size_t objects_count;
> +};
> +
> +/**
> + * struct attestation_evidence_result - Provider evidence result.
> + * @object_lengths: produced length for every requested object
> + */
> +struct attestation_evidence_result {
> + size_t *object_lengths;
No number of objects? That would make this structure more
self-contained. Copying `objects` from the request would allow passing
it around to handle results, but there may not be too much value in
doing it this way.
> +};
> +
> +/**
> + * struct attestation_provider - Immutable provider operations and properties.
> + * @evidence_get: produce requested evidence
> + * @mr_read: read one MR
> + * @mr_extend: extend one MR
> + * @evidence_caps: evidence capabilities, or NULL
> + * @mrs: fixed MR properties
> + * @mrs_count: number of fixed MRs
> + */
> +struct attestation_provider {
> + int (*evidence_get)(struct attestation *att,
> + const struct attestation_evidence_request *request,
> + struct attestation_evidence_result *result);
> + int (*mr_read)(struct attestation *att, unsigned int mr_id,
> + struct attestation_digest_set *values);
> + int (*mr_extend)(struct attestation *att, unsigned int mr_id,
> + const struct attestation_digest_set *values);
> + const struct attestation_evidence_caps *evidence_caps;
> + const struct attestation_mr_props *mrs;
> + size_t mrs_count;
> +};
> +
> +#endif /* _LINUX_ATTESTATION_H */
> --
> 2.56.0
next prev parent reply other threads:[~2026-10-29 18:50 UTC|newest]
Thread overview: 177+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 14:50 [PATCH RFC 00/20] attestation: Add a common subsystem and TDX support Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 01/20] ctlv: Add the schema language and generator Jiri Pirko
2026-10-15 14:58 ` sashiko-bot
2026-10-20 22:31 ` Jonathan Cameron
2026-10-21 13:23 ` Jiri Pirko
2026-10-27 8:34 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 02/20] ctlv: Add the UAPI wire format and family API Jiri Pirko
2026-10-19 23:29 ` Jason Gunthorpe
2026-10-20 12:26 ` Jiri Pirko
2026-10-20 23:00 ` Jonathan Cameron
2026-10-20 23:39 ` Jonathan Cameron
2026-10-21 13:54 ` Jiri Pirko
2026-10-26 18:55 ` Yeoreum Yun
2026-10-27 8:02 ` Jiri Pirko
2026-10-27 14:15 ` Jason Gunthorpe
2026-10-27 14:48 ` Yeoreum Yun
2026-10-27 15:17 ` Jason Gunthorpe
2026-10-27 15:55 ` Yeoreum Yun
2026-10-15 14:50 ` [PATCH RFC 03/20] ctlv: Add the root family specification and generated files Jiri Pirko
2026-10-19 23:29 ` Jason Gunthorpe
2026-10-20 12:28 ` Jiri Pirko
2026-10-20 12:55 ` Jason Gunthorpe
2026-10-20 14:07 ` Jiri Pirko
2026-10-20 23:30 ` Jonathan Cameron
2026-10-21 16:25 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 04/20] Documentation: ctlv: Add userspace ABI Jiri Pirko
2026-10-19 23:29 ` Jason Gunthorpe
2026-10-20 14:06 ` Jiri Pirko
2026-10-21 0:11 ` Jonathan Cameron
2026-10-22 9:01 ` Jiri Pirko
2026-10-23 19:23 ` Jonathan Cameron
2026-10-29 18:53 ` Sergii Dmytruk
2026-10-15 14:50 ` [PATCH RFC 05/20] ctlv: Prepare message input handling Jiri Pirko
2026-10-15 15:06 ` sashiko-bot
2026-10-21 0:43 ` Jonathan Cameron
2026-10-22 8:27 ` Jiri Pirko
2026-10-22 18:39 ` Jason Gunthorpe
2026-10-23 12:55 ` Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-27 10:17 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 06/20] ctlv: Prepare blob descriptor validation Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 07/20] ctlv: Prepare schema validation Jiri Pirko
2026-10-15 15:14 ` sashiko-bot
2026-10-15 14:50 ` [PATCH RFC 08/20] ctlv: Prepare message output handling Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 09/20] ctlv: Prepare VA blob handling Jiri Pirko
2026-10-15 15:14 ` sashiko-bot
2026-10-15 14:50 ` [PATCH RFC 10/20] ctlv: Prepare event queue support Jiri Pirko
2026-10-15 15:22 ` sashiko-bot
2026-10-21 1:12 ` Jonathan Cameron
2026-10-22 9:04 ` Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-26 14:45 ` Jiri Pirko
2026-10-27 12:38 ` Yeoreum Yun
2026-10-15 14:50 ` [PATCH RFC 11/20] ctlv: Prepare runtime introspection Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-26 14:52 ` Jiri Pirko
2026-10-26 16:12 ` Jason Gunthorpe
2026-10-27 10:21 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 12/20] ctlv: Add device and operation dispatch Jiri Pirko
2026-10-15 15:28 ` sashiko-bot
2026-10-21 1:25 ` Jonathan Cameron
2026-10-22 9:05 ` Jiri Pirko
2026-10-22 18:43 ` Jason Gunthorpe
2026-10-23 12:58 ` Jiri Pirko
2026-10-23 14:26 ` Jason Gunthorpe
2026-10-26 13:48 ` Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-27 13:38 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 13/20] Documentation: ctlv: Describe how to write a family Jiri Pirko
2026-10-15 15:20 ` sashiko-bot
2026-10-19 23:29 ` Jason Gunthorpe
2026-10-21 14:23 ` Jiri Pirko
2026-10-21 14:49 ` Jason Gunthorpe
2026-10-21 16:24 ` Jiri Pirko
2026-10-21 16:48 ` Jason Gunthorpe
2026-10-22 8:22 ` Jiri Pirko
2026-10-22 19:21 ` Jason Gunthorpe
2026-10-23 13:01 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 14/20] attestation: Add the base family specification and generated files Jiri Pirko
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-29 10:04 ` Jiri Pirko
2026-10-29 18:43 ` Jason Gunthorpe
2026-10-29 19:38 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 15/20] attestation: Prepare provider and instance core Jiri Pirko
2026-10-15 15:30 ` sashiko-bot
2026-10-19 23:29 ` Jason Gunthorpe
2026-10-21 13:04 ` Jiri Pirko
2026-10-29 18:50 ` Sergii Dmytruk [this message]
2026-10-15 14:50 ` [PATCH RFC 16/20] attestation: Prepare measurement register journal Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 17/20] attestation: Add CTLV operation handling Jiri Pirko
2026-10-15 15:33 ` sashiko-bot
2026-10-15 14:50 ` [PATCH RFC 18/20] tdx-guest: Expose the native attestation service API Jiri Pirko
2026-10-15 15:40 ` sashiko-bot
2026-10-26 14:07 ` Jason Gunthorpe
2026-10-27 10:03 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 19/20] attestation: Add the TDX family specification and generated files Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 20/20] attestation: Add the TDX family implementation Jiri Pirko
2026-10-15 15:40 ` sashiko-bot
2026-10-22 22:07 ` Edgecombe, Rick P
2026-10-23 14:12 ` Jason Gunthorpe
2026-10-23 19:40 ` Edgecombe, Rick P
2026-10-23 22:00 ` Jason Gunthorpe
2026-10-23 18:15 ` Jiri Pirko
2026-10-23 19:41 ` Edgecombe, Rick P
2026-10-16 23:43 ` [PATCH RFC 00/20] attestation: Add a common subsystem and TDX support Jason Gunthorpe
2026-10-17 18:16 ` Dionna Glaze
2026-10-17 19:06 ` Jarkko Sakkinen
2026-10-17 19:08 ` Jarkko Sakkinen
2026-10-17 19:22 ` Jarkko Sakkinen
2026-10-17 20:55 ` Jason Gunthorpe
2026-10-17 21:14 ` Jarkko Sakkinen
2026-10-17 20:34 ` Jason Gunthorpe
2026-10-17 20:55 ` Jarkko Sakkinen
2026-10-17 23:10 ` Jason Gunthorpe
2026-10-18 23:53 ` Dionna Glaze
2026-10-19 12:08 ` Jiri Pirko
2026-10-19 16:10 ` Dionna Glaze
2026-10-19 22:56 ` Jason Gunthorpe
2026-10-21 8:33 ` Jiri Pirko
2026-10-21 14:12 ` Mimi Zohar
2026-10-21 14:35 ` Jason Gunthorpe
2026-10-21 19:05 ` Mimi Zohar
2026-10-22 10:54 ` Jiri Pirko
2026-10-22 11:24 ` Mimi Zohar
2026-10-22 18:51 ` Jason Gunthorpe
2026-10-22 19:19 ` Jarkko Sakkinen
2026-10-22 19:23 ` Jason Gunthorpe
2026-10-22 19:40 ` Jarkko Sakkinen
2026-10-22 19:40 ` James Bottomley
2026-10-22 12:26 ` James Bottomley
2026-10-22 13:11 ` Jason Gunthorpe
2026-10-22 14:07 ` James Bottomley
2026-10-22 19:19 ` Jason Gunthorpe
2026-10-22 19:37 ` Mimi Zohar
2026-10-22 19:45 ` Jason Gunthorpe
2026-10-22 19:52 ` James Bottomley
2026-10-22 20:43 ` Mimi Zohar
2026-10-20 9:26 ` Jiri Pirko
2026-10-20 13:45 ` Mimi Zohar
2026-10-20 14:06 ` Jason Gunthorpe
2026-10-20 15:22 ` Mimi Zohar
2026-10-20 16:11 ` Yeoreum Yun
2026-10-20 16:52 ` Jason Gunthorpe
2026-10-21 12:23 ` Mimi Zohar
2026-10-21 13:18 ` Jarkko Sakkinen
2026-10-21 13:50 ` Yeoreum Yun
2026-10-21 13:51 ` Jason Gunthorpe
2026-10-21 14:31 ` Mimi Zohar
2026-10-21 14:39 ` Jason Gunthorpe
2026-10-21 12:48 ` James Bottomley
2026-10-21 13:55 ` Jason Gunthorpe
2026-10-19 12:40 ` Jarkko Sakkinen
2026-10-19 23:11 ` Jason Gunthorpe
2026-10-20 12:49 ` James Bottomley
2026-10-20 13:13 ` Jason Gunthorpe
2026-10-22 10:30 ` Aneesh Kumar K.V
2026-10-22 15:38 ` Jiri Pirko
2026-10-22 16:42 ` Jason Gunthorpe
2026-10-23 8:04 ` Aneesh Kumar K.V
2026-10-23 11:32 ` Jiri Pirko
2026-10-23 14:20 ` Jason Gunthorpe
2026-10-23 15:28 ` Aneesh Kumar K.V
2026-10-23 15:42 ` Jason Gunthorpe
2026-10-23 19:13 ` Jonathan Cameron
2026-10-27 18:43 ` Dave Jiang
2026-10-27 19:36 ` Jason Gunthorpe
2026-10-27 23:09 ` Dave Jiang
2026-10-27 23:46 ` Jason Gunthorpe
2026-10-28 19:16 ` Dave Jiang
2026-10-29 14:09 ` Jason Gunthorpe
2026-10-29 9:32 ` Jiri Pirko
2026-10-29 9:30 ` Jiri Pirko
2026-10-29 10:07 ` Jiri Pirko
2026-10-29 7:37 ` Nikolay Borisov
2026-10-29 14:16 ` Jason Gunthorpe
2026-10-29 18:43 ` Sergii Dmytruk
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=auOVbGYJjIQTN53z@MjU3Nj \
--to=sergii.dmytruk@3mdeb.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=aik@amd.com \
--cc=alistair.francis@wdc.com \
--cc=ankita@nvidia.com \
--cc=cedric.xing@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=david.quigley@intel.com \
--cc=drdeeglaze@gmail.com \
--cc=elena.reshetova@intel.com \
--cc=jgg@ziepe.ca \
--cc=jic23@kernel.org \
--cc=jiri@resnulli.us \
--cc=jpiotrowski@nvidia.com \
--cc=kas@kernel.org \
--cc=ksinyuk@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=peter.fang@intel.com \
--cc=pgonda@google.com \
--cc=qinkun@google.com \
--cc=rick.p.edgecombe@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=sameo@meta.com \
--cc=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=suzuki.poulose@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.