From: Dan Williams <dan.j.williams@intel.com>
To: Tom Lendacky <thomas.lendacky@amd.com>,
Dan Williams <dan.j.williams@intel.com>,
<linux-kernel@vger.kernel.org>, <x86@kernel.org>,
<linux-coco@lists.linux.dev>, <svsm-devel@coconut-svsm.dev>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Andy Lutomirski <luto@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
Michael Roth <michael.roth@amd.com>,
Ashish Kalra <ashish.kalra@amd.com>
Subject: Re: [PATCH v3 11/14] x86/sev: Extend the config-fs attestation support for an SVSM
Date: Tue, 16 Apr 2024 09:19:54 -0700 [thread overview]
Message-ID: <661ea52a53541_4d56129416@dwillia2-mobl3.amr.corp.intel.com.notmuch> (raw)
In-Reply-To: <3732b0d2-0471-48ce-89b8-43f425040846@amd.com>
Tom Lendacky wrote:
> On 4/16/24 00:37, Dan Williams wrote:
> > Tom Lendacky wrote:
> >> When an SVSM is present, the guest can also request attestation reports
> >> from the SVSM. These SVSM attestation reports can be used to attest the
> >> SVSM and any services running within the SVSM.
> >>
> >> Extend the config-fs attestation support to allow for an SVSM attestation
> >> report. This involves creating four (4) new config-fs attributes:
> >>
> >> - 'service-provider' (input)
> >> This attribute is used to determine whether the attestation request
> >> should be sent to the specified service provider or to the SEV
> >> firmware. The SVSM service provider is represented by the value
> >> 'svsm'.
> >>
> >> - 'service_guid' (input)
> >> Used for requesting the attestation of a single service within the
> >> service provider. A null GUID implies that the SVSM_ATTEST_SERVICES
> >> call should be used to request the attestation report. A non-null
> >> GUID implies that the SVSM_ATTEST_SINGLE_SERVICE call should be used.
> >>
> >> - 'service_manifest_version' (input)
> >> Used with the SVSM_ATTEST_SINGLE_SERVICE call, the service version
> >> represents a specific service manifest version be used for the
> >> attestation report.
> >>
> >> - 'manifestblob' (output)
> >> Used to return the service manifest associated with the attestation
> >> report.
> >>
> >> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
[..]
> >> +What: /sys/kernel/config/tsm/report/$name/service_provider
> >> +Date: January, 2024
> >> +KernelVersion: v6.10
> >> +Contact: linux-coco@lists.linux.dev
> >> +Description:
> >> + (WO) Attribute is visible if a TSM implementation provider
> >> + supports the concept of attestation reports from a service
> >> + provider for TVMs, like SEV-SNP running under an SVSM.
> >> + Specifying the service provider via this attribute will create
> >> + an attestation report as specified by the service provider.
> >> + Currently supported service-providers are:
> >> + svsm
> >> +
> >> + For the SVSM service provider, see the Secure VM Service Module
> >> + for SEV-SNP Guests v1.00 Section 7.
> >> + https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/58019.pdf
> >
> > Given "SVSM" is a cross vendor concept should this explicitly
> > callout: "For provider.service_provider == sev_guest.svsm" as
> > preparation for other implementations defining their "svsm" manifest
> > format?
>
> I'm not sure. Do we need to get that specific? If SVSM is cross vendor,
> will it be using / adding to the existing SVSM specification? If not,
> then each vendor is likely to have its own name for the SVSM concept
> that would be unique enough...
Yeah, I guess we can kick can that down the road and see what other
vendors do. I know the coconut-svsm project is cross vendor, but I do
not know the details.
> >> +
> >> +What: /sys/kernel/config/tsm/report/$name/service_manifest_version
> >> +Date: January, 2024
> >> +KernelVersion: v6.10
> >> +Contact: linux-coco@lists.linux.dev
> >> +Description:
> >> + (WO) Attribute is visible if a TSM implementation provider
> >> + supports the concept of attestation reports from a service
> >> + provider for TVMs, like SEV-SNP running under an SVSM.
> >> + Indicates the service manifest version requested for the
> >> + attestation report. If this field is not set by the user,
> >> + the default manifest version of the service (the service's
> >> + initial/first manifest version) is returned. The initial
> >> + manifest version is always available.
> >
> > ...and that number is zero? Is there any expectation that the kernel
>
> Yes, that number is zero.
>
> > sanity checks this version, or how does the user figure out they need to
> > roll this request back?
>
> Right now there aren't any non-zero versions, so there is nothing for
> the user to figure out. However, the service will determine when it
> creates a new version and then the user will need to understand what the
> reason for that is and decide. I'm not sure I can give you a specific
> answer at this stage, but we need to allow for a change in the manifest
> without affecting existing users.
Right, but it feels odd that userspace could write UINT_MAX to this
value and the kernel says, "yup, looks like a valid manifest version to
me".
> And since the spec has been approved already, I can't really go back and
> add a requirement that manifest format always be additive.
Those breaking changes have not arrived yet so still a chance to
influence, no?
The documentation here at least guarantees that the initial manifest
version is always valid, and I expect the spec authors to realize that
the kernel has a role to play in not breaking existing userspace. I.e.
it is not in the spec's interest to disallow fallback to any
version between 0 and N-1 where N is the latest.
The kernel need not tolerate version induced breakage from ACPI
specification updates because that spec is committed to compatibility,
why does this spec need to be less disciplined than that?
> >> +
> >> + For the SVSM service provider, see the Secure VM Service Module
> >> + for SEV-SNP Guests v1.00 Section 7.
> >> + https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/58019.pdf
> >
>
> >> +static ssize_t tsm_report_service_provider_store(struct config_item *cfg,
> >> + const char *buf, size_t len)
> >> +{
> >> + struct tsm_report *report = to_tsm_report(cfg);
> >> + size_t sp_len;
> >> + char *sp;
> >> + int rc;
> >> +
> >> + guard(rwsem_write)(&tsm_rwsem);
> >> + rc = try_advance_write_generation(report);
> >> + if (rc)
> >> + return rc;
> >> +
> >> + sp_len = (buf[len - 1] != '\n') ? len : len - 1;
> >
> > This feels like it wants a sysfs_strdup().
>
> If there start to be more string oriented operations in the file, then
> it might be worth it. For now I don't really see a reason.
To be clear I was thinking of occurrences of this patten outside of this
file. Turns out this pattern is not as prevalent as I would have
guessed, resource_alignment_store() was the only occurrence I could
find. Skip for now works for me.
next prev parent reply other threads:[~2024-04-16 16:20 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-25 22:26 [PATCH v3 00/14] Provide SEV-SNP support for running under an SVSM Tom Lendacky
2024-03-25 22:26 ` [PATCH v3 01/14] x86/sev: Rename snp_init() in the boot/compressed/sev.c file Tom Lendacky
2024-04-09 17:09 ` Borislav Petkov
2024-04-09 17:44 ` Tom Lendacky
2024-04-09 17:57 ` Borislav Petkov
2024-04-12 16:19 ` Gupta, Pankaj
2024-03-25 22:26 ` [PATCH v3 02/14] x86/sev: Make the VMPL0 checking function more generic Tom Lendacky
2024-04-12 16:41 ` Gupta, Pankaj
2024-04-17 11:46 ` Borislav Petkov
2024-04-17 20:35 ` Tom Lendacky
2024-04-17 20:50 ` Borislav Petkov
2024-04-18 18:38 ` Tom Lendacky
2024-04-21 7:12 ` Borislav Petkov
2024-03-25 22:26 ` [PATCH v3 03/14] x86/sev: Check for the presence of an SVSM in the SNP Secrets page Tom Lendacky
2024-04-12 17:03 ` Gupta, Pankaj
2024-04-17 20:40 ` Borislav Petkov
2024-04-18 21:17 ` Tom Lendacky
2024-04-22 22:07 ` Borislav Petkov
2024-03-25 22:26 ` [PATCH v3 04/14] x86/sev: Use kernel provided SVSM Calling Areas Tom Lendacky
2024-04-12 16:04 ` Gupta, Pankaj
2024-03-25 22:26 ` [PATCH v3 05/14] x86/sev: Perform PVALIDATE using the SVSM when not at VMPL0 Tom Lendacky
2024-03-25 22:26 ` [PATCH v3 06/14] x86/sev: Use the SVSM to create a vCPU when not in VMPL0 Tom Lendacky
2024-04-12 15:28 ` Gupta, Pankaj
2024-03-25 22:26 ` [PATCH v3 07/14] x86/sev: Provide SVSM discovery support Tom Lendacky
2024-04-15 16:12 ` Gupta, Pankaj
2024-03-25 22:26 ` [PATCH v3 08/14] x86/sev: Provide guest VMPL level to userspace Tom Lendacky
2024-03-25 22:26 ` [PATCH v3 09/14] virt: sev-guest: Choose the VMPCK key based on executing VMPL Tom Lendacky
2024-04-16 4:54 ` Dan Williams
2024-04-16 15:17 ` Tom Lendacky
2024-04-16 15:47 ` Dan Williams
2024-03-25 22:26 ` [PATCH v3 10/14] configfs-tsm: Allow the privlevel_floor attribute to be updated Tom Lendacky
2024-04-16 4:55 ` Dan Williams
2024-04-16 15:23 ` Tom Lendacky
2024-04-16 15:57 ` Dan Williams
2024-04-16 16:17 ` Tom Lendacky
2024-03-25 22:26 ` [PATCH v3 11/14] x86/sev: Extend the config-fs attestation support for an SVSM Tom Lendacky
2024-04-16 5:37 ` Dan Williams
2024-04-16 15:53 ` Tom Lendacky
2024-04-16 16:19 ` Dan Williams [this message]
2024-03-25 22:26 ` [PATCH v3 12/14] fs/configfs: Add a callback to determine attribute visibility Tom Lendacky
2024-04-16 5:46 ` Dan Williams
2024-04-16 16:01 ` Tom Lendacky
2024-04-16 18:25 ` Dan Williams
2024-04-16 19:54 ` Tom Lendacky
2024-04-16 20:03 ` Dan Williams
2024-03-25 22:26 ` [PATCH v3 13/14] x86/sev: Hide SVSM attestation entries if not running under an SVSM Tom Lendacky
2024-04-09 18:12 ` Kuppuswamy Sathyanarayanan
2024-04-12 15:52 ` Tom Lendacky
2024-04-15 19:16 ` Tom Lendacky
2024-04-15 19:48 ` Kuppuswamy Sathyanarayanan
2024-04-15 20:13 ` Tom Lendacky
2024-04-15 21:50 ` Kuppuswamy Sathyanarayanan
2024-04-15 22:03 ` Tom Lendacky
2024-04-16 6:09 ` Dan Williams
2024-04-16 6:08 ` Dan Williams
2024-04-16 6:05 ` Dan Williams
2024-04-16 5:47 ` Dan Williams
2024-04-16 16:07 ` Tom Lendacky
2024-04-16 6:03 ` Dan Williams
2024-04-16 16:10 ` Tom Lendacky
2024-03-25 22:26 ` [PATCH v3 14/14] x86/sev: Allow non-VMPL0 execution when an SVSM is present Tom Lendacky
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=661ea52a53541_4d56129416@dwillia2-mobl3.amr.corp.intel.com.notmuch \
--to=dan.j.williams@intel.com \
--cc=ashish.kalra@amd.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=michael.roth@amd.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=svsm-devel@coconut-svsm.dev \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.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;
as well as URLs for NNTP newsgroup(s).