On 5/4/26 2:10 PM, Arun Menon wrote:
On Thu, Apr 30, 2026 at 04:43:27PM -0400, Stefan Berger wrote:


On 4/29/26 11:40 PM, Stefan Berger wrote:


On 4/29/26 4:07 PM, Arun Menon wrote:
Hi Stefan,

On Wed, Apr 29, 2026 at 02:15:16PM -0400, Stefan Berger wrote:


On 4/28/26 8:57 AM, Stefan Berger wrote:


On 4/28/26 3:01 AM, Arun Menon wrote:


With MAX() it can now be bigger than TPM_TIS_BUFFER_MAX if the
backend says
so -- hm...

TPM_TIS_BUFFER_MAX is still 4096.

Oh, I had still based my patches on your TPM_TIS_BUFFER_MAX increase to
8192 bytes. Let me fixes this along with a few other things. I will let
you know.

I have another series that I will post now that can be applied to
master. It's adding a test for TIS over I2C but I will need to extend
that one also with the large transfer test case then.



So I have resolved this issue now along with a few other things.
My branch
is here: https://github.com/stefanberger/qemu-tpm/tree/work-tpm-for-11.1

- I have applied the i2c swtpm test case series first since it could be
easily upstreamed first
- Then your patch "migration/vmstate: Add VMState support for
GByteArray"
- Then the CRB chunk + TIS extended buffer support series. I modified my
patches (last 4 in that series) to
    - increased MAX_TIS_BUFFER_SIZE to 8192
    - added migration blockers dynamically for TIS whenever >4096
bytes are
either in the request or response; remove them later on again
when device
goes into ready state for example
    - added large transfer test also for i2c

Please pick up those patches for v6 posting, or otherwise you
can split your
v5 series up into CRB-only support for v6 and I post my (last 4) patches
later on.


Thank you. I agree. I will post v6 as CRB-only support. The GByteArray
patch is already accepted. The complex TIS changes can be posted
separately later.

Regarding the TIS buffer: I saw you implemented the migration blockers
and 8192-byte increase in your branch. Should I discard my

It's quite dynamic with the blocker being set when 4097 bytes of a TPM
command were received or when a TPM response with > 4096 bytes is
received. The blocker is removed when the device goes into ready state.
The intention is to allow a user to choose an old machine type with a
PQC-enabled swtpm+libtpms and be able to migrate to an older version of
QEMU unless the blocker was set. Correct me if I am wrong in my
thinking...

Another solution would be to limit the 8kb buffer to 4kb for 11.0 and older
machines.

Yes, I have limited this using the post_load hook for the extended part.

+int tpm_tis_ext_buffer_post_load(TPMState *s)
+{
+    /*
+     * Calculate the maximum extension buffer size allowed, by comparing
+     * the destination VM's backend capacity with TPM_TIS_BUFFER_MAX.
+     */
+    uint32_t max_ext = s->be_buffer_size > TPM_TIS_BUFFER_MAX ?
+                       s->be_buffer_size - TPM_TIS_BUFFER_MAX : 0;
+
+    if (s->ext_size > max_ext) {
+        /*
+         * Source buffer size is greater than what the destination backend
+         * allows
+         */
+        g_clear_pointer(&s->ext_buffer, g_free);
+        return -EINVAL;
+    }
+    if (s->ext_size > 0) {
+        memcpy(s->buffer + TPM_TIS_BUFFER_MAX, s->ext_buffer, s->ext_size);
+        g_clear_pointer(&s->ext_buffer, g_free);
+    }

We may use this patch in future if we want to change static to dynamic
buffer array allocation.

I posted now what I have beyond your v6 CRB patches and we can see in which order we want to switch to dynamically allocated buffers.



Regards,
Arun Menon




Reply via email to