From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>,
Ard Biesheuvel <ardb@kernel.org>
Cc: Jarkko Sakkinen <jarkko@kernel.org>,
x86@kernel.org, Ross Philipson <ross.philipson@oracle.com>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Huewe <peterhuewe@gmx.de>, Jason Gunthorpe <jgg@ziepe.ca>,
"open list:TPM DEVICE DRIVER" <linux-integrity@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>,
trenchboot-devel@googlegroups.com
Subject: Re: [RFC PATCH 0/4] Alternative TPM patches for Trenchboot
Date: Mon, 4 Nov 2024 11:34:06 -0500 [thread overview]
Message-ID: <102f7de4-a2d0-4315-9bce-6489504180fb@apertussolutions.com> (raw)
In-Reply-To: <3bc70b659c1c86c0f08c6d91a6d894ce58825e04.camel@HansenPartnership.com>
On 11/4/24 08:21, James Bottomley wrote:
> On Mon, 2024-11-04 at 07:19 -0500, Daniel P. Smith wrote:
>> On 11/4/24 06:55, 'Ard Biesheuvel' via trenchboot-devel wrote:
> [...]
>>> I was referring specifically to the read-write sysfs node that
>>> permits user space to update the default TPM locality. Does it need
>>> to be writable? And does it need to exist at all?
>
> This was my question here, which never got answered as well:
>
> https://lore.kernel.org/linux-integrity/685f3f00ddf88e961e2d861b7c783010774fe19d.camel@HansenPartnership.com/
>
>> Right, sorry. As I recall, that was introduce due to the sequence of
>> how the TPM driver handled locality, moving back to Locality 0 after
>> done sending cmds. In the Oracle implementation, the initramfs takes
>> integrity measurements of the environment it is about to kexec into,
>> eg. target kernel, initramfs, file system, etc. Some of these
>> measurements should go into PCR 17 and PCR 18, which requires
>> Locality 2 to be able extend those PCRs. If the slmodule is able to
>> set the locality for all PCR extends coming from user space to be
>> Locality 2, that removes the current need for it.
>
> Well, no, that's counter to the desire to have user space TPM commands
> and kernel space TPM commands in different localities. I thought the
> whole point of having locality restricted PCRs is so that only trusted
> entities (i.e. those able to access the higher locality) could extend
> into them. If you run every TPM command, regardless of source, in the
> trusted locality, that makes the extends accessible to everyone and
> thus destroys the trust boundary.
As to Locality switching:
The call sequence is,
tpm_pcr_extend -> tpm_find_get_ops -> tpm_try_get_ops ->
tpm_chip_start -> if (chip->locality == -1) tpm_request_locality
And when the extend completes:
out: tpm_put_ops -> tpm_chip_stop -> tpm_relinquish_locality ->
chip->locality = -1;
We made slmodule set the locality value used by request/relinquish back
to 0 when it was done with its initialization and then the sysfs nodes
to allow the runtime to request it when it needed to send measurements.
This is because we did not want to pin how it works to the one use case
currently focused on.
By definition I provided earlier, in our use case the initramfs is part
of the TCB as it is embedded into the kernel. As to the locality roles,
according to TPM Platform Profile:
- Locality 2: Dynamically Launched OS (Dynamic OS) “runtime” environment.
- Locality 1: An environment for use by the Dynamic OS.
> It also doesn't sound like the above that anything in user space
> actually needs this facility. The measurements of kernel and initramfs
> are already done by the boot stub (to PCR9, but that could be changed)
> so we could do it all from the trusted entity.
I apologies for not expressing this clearer, as that statement is
incorrect. The currently deployed use case works as follows:
[SRTM] --> [GRUB] -- (DLE, terminates SRTM chain) -->
[CPU] -- (starts DRTM chain) --> [SINIT ACM] -->
[SL kernel + initramfs] -- (load/measure/kexec) --> [target kernel]
As one can see, the SRTM is terminated and its components are not used
in the DRTM chain. This model reproduces the tboot model, with several
enhancements, including the ability for a single solution that supports
and works on Intel, AMD, and we are currently enabling Arm. It is not
the only model that can be used, which several were presented at 2020
Plumbers. A detailed version of a deployed implementation of the secure
upgrade use case was detailed in the 2021 FOSSDEM presentation. Where
the LCP policy is used to tell the ACM what [SL kernel + initramfs] are
allowed to be started by TXT. This allows the ability to launch into an
upgrade state without having to reboot.
In case the question comes up from those not familiar, the kexec does an
GETSEC[SEXIT] which closes off access to Localities 1 and 2, thus
locking the DRTM PCR values. It brings the CPUs out of SMX mode so the
target kernel does not require to have any knowledge about running in
that mode.
v/r,
dps
next prev parent reply other threads:[~2024-11-04 16:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-02 15:22 [RFC PATCH 0/4] Alternative TPM patches for Trenchboot Jarkko Sakkinen
2024-11-02 15:22 ` [RFC PATCH 1/4] tpm, tpm_tis: Close all localities Jarkko Sakkinen
2024-11-02 15:22 ` [RFC PATCH 2/4] tpm, tpm_tis: Address positive localities in tpm_tis_request_locality() Jarkko Sakkinen
2024-11-02 15:22 ` [RFC PATCH 3/4] tpm, tpm_tis: allow to set locality to a different value Jarkko Sakkinen
2024-11-02 15:22 ` [RFC PATCH 4/4] tpm: sysfs: Show locality used by kernel Jarkko Sakkinen
2024-11-02 18:00 ` [RFC PATCH 0/4] Alternative TPM patches for Trenchboot Jarkko Sakkinen
2024-11-04 10:57 ` Daniel P. Smith
2024-11-04 11:18 ` Jarkko Sakkinen
2024-11-04 11:19 ` Jarkko Sakkinen
2024-11-04 11:29 ` Jarkko Sakkinen
2024-11-04 11:27 ` Ard Biesheuvel
2024-11-04 11:47 ` Jarkko Sakkinen
2024-11-04 11:52 ` Daniel P. Smith
2024-11-04 11:55 ` Ard Biesheuvel
2024-11-04 12:06 ` Jarkko Sakkinen
2024-11-04 12:19 ` Daniel P. Smith
2024-11-04 13:21 ` James Bottomley
2024-11-04 16:34 ` Daniel P. Smith [this message]
2024-11-04 20:36 ` James Bottomley
2024-11-05 0:13 ` Daniel P. Smith
2024-11-04 15:03 ` Jarkko Sakkinen
2024-11-04 20:40 ` ross.philipson
2024-11-05 0:51 ` ross.philipson
2024-11-05 16:24 ` Ard Biesheuvel
2024-11-05 18:21 ` ross.philipson
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=102f7de4-a2d0-4315-9bce-6489504180fb@apertussolutions.com \
--to=dpsmith@apertussolutions.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=ardb@kernel.org \
--cc=jarkko@kernel.org \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
--cc=ross.philipson@oracle.com \
--cc=tglx@linutronix.de \
--cc=trenchboot-devel@googlegroups.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