From: Arun Menon <armenon@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Jarkko Sakkinen <jarkko@kernel.org>,
linux-integrity@vger.kernel.org, Peter Huewe <peterhuewe@gmx.de>,
Jason Gunthorpe <jgg@ziepe.ca>, Arun Menon <armenon@redhat.com>
Subject: [RFC v2 0/5] tpm_crb: Add command and response buffer chunking support
Date: Tue, 24 Mar 2026 23:42:39 +0530 [thread overview]
Message-ID: <20260324181244.17741-1-armenon@redhat.com> (raw)
The new version of TCG TPM v185 (currently under review [1]) supports
sending data/commands in chunks for the CRB (Command Response Buffer)
interface. This is in line with the initiative to support PQC algorithms.
This series implements the logic to send and receive larger TPM
cmd/rsp between the linux guest and the TPM backend in chunks.
Currently, the TPM CRB driver is limited by the physical size of the
MMIO window. When userspace attempts to send a payload that exceeds this
size, the driver rejects it.
This series introduces chunking support. The driver now checks the CRB
interface capability for CRB_INTF_CAP_CRB_CHUNK. If supported by the
backend, the driver will slice oversized commands into MMIO-sized
chunks, signalling the backend via CRB_START_NEXT_CHUNK, and finalizing
with CRB_START_INVOKE. Responses are also read back in a similar chunked
manner.
If the backend does not support chunking, the driver retains its legacy
behaviour and enforces the standard size limits.
This feature also requires the QEMU to interpret the data in chunks and
forward it to the TPM backend and subsequently dispatch the TPM response
in chunks back to the linux guest. This is implemented in [2]
[1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific-Platform-TPM-Profile-for-TPM-2p0-v1p07_rc1_121225.pdf
[2] https://lore.kernel.org/qemu-devel/20260319135316.37412-1-armenon@redhat.com/
v2
--
- Add size checks before copying memory.
- Update TPM_BUFSIZE to 8KB.
- Commit messages updated to indicate motivation and logic of the change.
Arun Menon (5):
tpm_crb: Add register definitions of TPM CRB chunking fields
tpm_crb: Add new wrapper function to invoke start method
tpm_crb: Implement command and response chunking logic
tpm: Increase TPM_BUFSIZE to 8kB for chunking support
tpm: tis_i2c: Use local 4KB buffer to limit memory usage
drivers/char/tpm/tpm.h | 2 +-
drivers/char/tpm/tpm_crb.c | 199 +++++++++++++++++++++++----------
drivers/char/tpm/tpm_tis_i2c.c | 6 +-
3 files changed, 146 insertions(+), 61 deletions(-)
--
2.53.0
next reply other threads:[~2026-03-24 18:12 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-24 18:12 Arun Menon [this message]
2026-03-24 18:12 ` [RFC v2 1/5] tpm_crb: Add register definitions of TPM CRB chunking fields Arun Menon
2026-03-24 18:12 ` [RFC v2 2/5] tpm_crb: Add new wrapper function to invoke start method Arun Menon
2026-03-24 18:12 ` [RFC v2 3/5] tpm_crb: Implement command and response chunking logic Arun Menon
2026-03-24 18:12 ` [RFC v2 4/5] tpm: Increase TPM_BUFSIZE to 8kB for chunking support Arun Menon
2026-03-24 18:12 ` [RFC v2 5/5] tpm: tis_i2c: Use local 4KB buffer to limit memory usage Arun Menon
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=20260324181244.17741-1-armenon@redhat.com \
--to=armenon@redhat.com \
--cc=jarkko@kernel.org \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
/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