From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853894; cv=none; d=zohomail.com; s=zohoarc; b=JQOkgH7wmmNx+3LsqFBgux8vtrxw2hkB0vJXUXN3r8t2zzq0U9EvMbksN91OGUrKZ420AWcSYmrVvzzYi/Y+HEwdWUxIro7iZgEhGfftRAaH1oT98X0CSc8O71fXCBpY5FYBz45if4aCuLvbZD1Rlnie6JoH+8vev1t1Fff5x6k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853894; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=T8P1JQ/3nfAUVN6IA3Ayq6ubLufw+hR8iRx/Hjum7dM=; b=VRSSn8h8W/biAlYA27dGk5KWMF+EnlkJpgjRwRFt4YWvWGhqp0xt6WF02IRO0w8/0K80Jic0f0IatTv3vzxrKYEkiIL7T6SDvtgfhk200Ccjw+nSuC9eO73UGb7FknlNvDS+ZslZ6EXTONgm6gPMDaQ1iQLc3iZmnbgWZG/Tcho= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853894856683.6677950761205; Wed, 22 Apr 2026 03:31:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrD-0006hi-1b; Wed, 22 Apr 2026 06:30:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUqz-0006fm-Ij for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:47 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUqv-0006qQ-4r for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:43 -0400 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-509-zdVWMz0NMQC6MHvtF84RMA-1; Wed, 22 Apr 2026 06:30:36 -0400 Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c797efdaa9cso2413499a12.3 for ; Wed, 22 Apr 2026 03:30:36 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:30:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853838; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T8P1JQ/3nfAUVN6IA3Ayq6ubLufw+hR8iRx/Hjum7dM=; b=THHlDPGwDDq5YWpA2rtzyeCR8yHUa4xsjNyzUcVm5HSB4eXKdItr4l4dHFI2gDYsfWliAK zyUWu+ahJbmrshImGPEe2Ve9fY3EuBK1wdSVl3/C9Katif51UxHT1D/i7HUcJiRn2L08Hg klFvdVFewGO0xpzBt7+itQEhl+CSQ4s= X-MC-Unique: zdVWMz0NMQC6MHvtF84RMA-1 X-Mimecast-MFC-AGG-ID: zdVWMz0NMQC6MHvtF84RMA_1776853836 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853835; x=1777458635; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=T8P1JQ/3nfAUVN6IA3Ayq6ubLufw+hR8iRx/Hjum7dM=; b=HlJsAUvxHWNNQTS6fcb6jb56tsI4U1Pdv98r5641B6zPxDbPdPxYA5bWnan3dbP86z 8ZvBcO7T/rBPgMW+mSqEqgcsQWhfqNwPTagBUnNrqfUBlkix5Ei32FSURu6XgQUPe5pa Vu+O4ppkyq05tlM5WLoG50l7e8YpyvHTQs25gI/4m/9F3GOSa16AufJaKGHHyj9Mr2al HwOQBLTxsTkpPY2ISM2VhhZ3vWMxBE/o7z53lrPtvu7sT/hAZpoRdsArgFRH10RA7LLw fYHkZQW9vXmRn9x84EeI80mYypc6VmMIauL/taLyGKCP9FcaQd0kaUia0KLAJLFpaTp+ z0mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853835; x=1777458635; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=T8P1JQ/3nfAUVN6IA3Ayq6ubLufw+hR8iRx/Hjum7dM=; b=dUz5hxXPV2U4BnF/170wR4YbWzucoNiiwTNTvPLHAqtpHHO7xqRbRVZMAtHqfz4P0x rKeArVB7zfZobNdJSTQ+IvHfoV3RYNBuUHaa9Jhw7vACfLzcXsilg9YmRNU6RYoCG3sa /41RkV6sGwwCJAax3R9hpYb2Z7cXGXg2f+q3zWMtYpJaaR+5SU7NHs5oCTP4LWSA7II/ pdUhhf45sjM+HdsVBm/mjffodZc6TFbLm09uKuRPt6f6Ol2RGnilsnAN0Hp7kgQiwhI+ HbaQnwiYqf4I8gCALYj1u8PfLomrJzt9EVAu4KILfaw23u0RJsekJkU5IqiwtOQUDyNK WQmA== X-Gm-Message-State: AOJu0YwTLWk/P5eCtCfgg5hcJbePuoTdNEM0y95bnfjsIu8R5GCvWQT4 DMyVXvEDLcuwCw1qMDeldcEc1K4AzoK4Lioj0d+u+iznZjRxpdPGlCaj5yPBOevnIyJcJFxKGtK 3Nx5tp9ncaHQohJRY9p+CUZqMTH/y5q6b0J4Dhey/IOrcmLrDsbYgd+DHbUH1BKzMEge+9aVZ+/ ULuh47LkqrwPWFggJR6aoPrtrCxzYJrG7sqLYIYbk= X-Gm-Gg: AeBDietc/1vUsdhjDGThhkoaNREQCvIgaOxuGBINUmtLyINVEdklBzsuffV16OqCn6F mTL6zoBcqTVASW2AshGY6J/xHH7g6YDoENAegGYJf7oYY2fOtOpapaNZK8zoG9QD9SRNtQXby4y l+Eg/FkmybqnXWyoXPu12WyimURqIOQJiZJ7zPgkOVPFdhs4asARByOy3oWTGw2rNg9sHd/tjmu EWn+RtU4+Yroqfzua4Pj1Mh+sElATxMfkTGPUHYTRYtw9x76Bwnmhf4y8uv1Fm0siHujepflcl/ DZSQmjm4bf5GDMNHZLAlnA82d43N7AAlW5xPfWmZZm0TP0Ymt+E0R94FD11AQFbFNF1Xx4wWoeZ OOkTs+Zk5652FB+ymeqS1NEPmzIEljGH3AbTZRwgIjg4Pm53nw3yg1ec1Wy5S5rMhHMrz4rHmeg == X-Received: by 2002:a05:6a21:6d85:b0:3a2:7ef4:81e0 with SMTP id adf61e73a8af0-3a27ef48641mr13983792637.55.1776853835147; Wed, 22 Apr 2026 03:30:35 -0700 (PDT) X-Received: by 2002:a05:6a21:6d85:b0:3a2:7ef4:81e0 with SMTP id adf61e73a8af0-3a27ef48641mr13983718637.55.1776853834480; Wed, 22 Apr 2026 03:30:34 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 01/10] hw/tpm: Add TPM CRB chunking fields Date: Wed, 22 Apr 2026 16:00:09 +0530 Message-ID: <20260422103018.123608-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853895923158500 From: Arun Menon - Add new fields to the CRB Interface Identifier and the CRB Control Start registers. - CRB_CTRL_START now has 2 new settings, that can be toggled using the nextChunk and crbRspRetry bits. - CapCRBChunk bit (10) was Reserved1 previously. The field is reused in this revision of the specification. Refer to section 6.4.2.2 of [1] - Add hw_compat global property called cap-chunk because the chunking feature is only supported for machine type 11.1 and higher. [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_Pub.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/core/machine.c | 4 +++- hw/tpm/tpm_crb.c | 6 ++++++ include/hw/acpi/tpm.h | 5 ++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 1abc8ae737..6d27cf69a2 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -38,7 +38,9 @@ #include "hw/acpi/generic_event_device.h" #include "qemu/audio.h" =20 -GlobalProperty hw_compat_11_0[] =3D {}; +GlobalProperty hw_compat_11_0[] =3D { + { "tpm-crb", "cap-chunk", "off"}, +}; const size_t hw_compat_11_0_len =3D G_N_ELEMENTS(hw_compat_11_0); =20 GlobalProperty hw_compat_10_2[] =3D { diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 8723536f93..9555b2c62d 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -45,6 +45,8 @@ struct CRBState { =20 bool ppi_enabled; TPMPPI ppi; + + bool cap_chunk; }; typedef struct CRBState CRBState; =20 @@ -59,6 +61,7 @@ DECLARE_INSTANCE_CHECKER(CRBState, CRB, #define CRB_INTF_CAP_FIFO_NOT_SUPPORTED 0b0 #define CRB_INTF_CAP_CRB_SUPPORTED 0b1 #define CRB_INTF_IF_SELECTOR_CRB 0b1 +#define CRB_INTF_CAP_CRB_CHUNK 0b1 =20 #define CRB_CTRL_CMD_SIZE (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER) =20 @@ -229,6 +232,7 @@ static const VMStateDescription vmstate_tpm_crb =3D { static const Property tpm_crb_properties[] =3D { DEFINE_PROP_TPMBE("tpmdev", CRBState, tpmbe), DEFINE_PROP_BOOL("ppi", CRBState, ppi_enabled, true), + DEFINE_PROP_BOOL("cap-chunk", CRBState, cap_chunk, true), }; =20 static void tpm_crb_reset(void *dev) @@ -262,6 +266,8 @@ static void tpm_crb_reset(void *dev) CapCRB, CRB_INTF_CAP_CRB_SUPPORTED); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, InterfaceSelector, CRB_INTF_IF_SELECTOR_CRB); + ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, + CapCRBChunk, s->cap_chunk ? CRB_INTF_CAP_CRB_CHUNK : = 0); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, RID, 0b0000); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID2, diff --git a/include/hw/acpi/tpm.h b/include/hw/acpi/tpm.h index d2bf6637c5..6eece21397 100644 --- a/include/hw/acpi/tpm.h +++ b/include/hw/acpi/tpm.h @@ -149,7 +149,7 @@ REG32(CRB_INTF_ID, 0x30) FIELD(CRB_INTF_ID, InterfaceVersion, 4, 4) FIELD(CRB_INTF_ID, CapLocality, 8, 1) FIELD(CRB_INTF_ID, CapCRBIdleBypass, 9, 1) - FIELD(CRB_INTF_ID, Reserved1, 10, 1) + FIELD(CRB_INTF_ID, CapCRBChunk, 10, 1) FIELD(CRB_INTF_ID, CapDataXferSizeSupport, 11, 2) FIELD(CRB_INTF_ID, CapFIFO, 13, 1) FIELD(CRB_INTF_ID, CapCRB, 14, 1) @@ -168,6 +168,9 @@ REG32(CRB_CTRL_STS, 0x44) FIELD(CRB_CTRL_STS, tpmIdle, 1, 1) REG32(CRB_CTRL_CANCEL, 0x48) REG32(CRB_CTRL_START, 0x4C) + FIELD(CRB_CTRL_START, Start, 0, 1) + FIELD(CRB_CTRL_START, crbRspRetry, 1, 1) + FIELD(CRB_CTRL_START, nextChunk, 2, 1) REG32(CRB_INT_ENABLED, 0x50) REG32(CRB_INT_STS, 0x54) REG32(CRB_CTRL_CMD_SIZE, 0x58) --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853936; cv=none; d=zohomail.com; s=zohoarc; b=XBtVv6oZgCkNKTKVEl2/u05gzMDWAjCZPgKLeUqTfFSC+C8RhwojBJpL6VzV22GuYa1/tJabiVm0E14Rzp3ht7u8u2HQkNaeU/Nyz0KdaqgAOkviXnKURQ1wlCsgEtNTJJDuA7H2c61fwM860Qx0Bj2HEIZzhnq8IADmIlRC+Bw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853936; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PEYM9qQ2piMIA+95zgwlQONrThblb9q7SVsakFk7ZAY=; b=F5e5W9/hk6CX16exelStV3I9nF8NZttHnZkIIUv2LcFA3SraqfzNVcjWBPFawXAHCZMU4WymeCQnBQj0KCm1PONgiwIdgqJWopN0wVpaypqW1ten544Oywvff6cnTl351lNgMU5e5x6PkhlMo95Pzna8eYnhkXV3ctgc87CWG4Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853936591875.6288270147634; Wed, 22 Apr 2026 03:32:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrV-0006m7-0Z; Wed, 22 Apr 2026 06:31:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUr2-0006g4-Mj for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUr1-0006r9-5v for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:48 -0400 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-653-jLp1p0qCPcKWWjzG4vWgtA-1; Wed, 22 Apr 2026 06:30:43 -0400 Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c795fa31e18so2587777a12.2 for ; Wed, 22 Apr 2026 03:30:43 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:30:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853845; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PEYM9qQ2piMIA+95zgwlQONrThblb9q7SVsakFk7ZAY=; b=hCt3BWkwElhq5e6BRykT39PsTx2/BNvML4wRIXMTb4TVK2qCz2yUO9AjNPdQZllOJk2efb cDFnIewzZ6qb2RVnETqMGmESTK8yyuEZ+Nn3wCablMxrF98W46Eoso6+KDRZk3tBWGzrO9 zcSs8qolzoCtsm5fVI4Ho1nHMlUkQrI= X-MC-Unique: jLp1p0qCPcKWWjzG4vWgtA-1 X-Mimecast-MFC-AGG-ID: jLp1p0qCPcKWWjzG4vWgtA_1776853842 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853842; x=1777458642; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PEYM9qQ2piMIA+95zgwlQONrThblb9q7SVsakFk7ZAY=; b=LyDcjiAtd+I/l1mmb8yJK8AAeIfJyJ4JU3fIE/CGKoHAov17FmkafZ5uYjWQkAFB/t XRcflJdSQvyenDi3OUO5aOAUYXgkDj7jt3Hk0+9EMVmW0Iykah6685R28fagmJl2L3Fq zcMI++5o+nfSH1yLvfxKB+UX1k/hO4kf4+aNKR20Rfx22Y3wxjvpk8fb96COH+qJ3rZc iafpUKWqr1D+cxWxRm03EueVeLlMIdcnedxkYZgN1cWushfZBDM/IKW3iV0QHUv4WGD6 eS+c76Rb4jVjfx/IAnNz+UUxzgiTSXij2SXldUPCnfGiTnDU2swBd2r9+TZlDIcxhK9z SDWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853842; x=1777458642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PEYM9qQ2piMIA+95zgwlQONrThblb9q7SVsakFk7ZAY=; b=k6HHisWQPk9DA5uCOkiiMMQ53Bm3Pz0GRKHISNyY2y0xmOQ4Syg0YAgBe0WYvf+Y3Z rVy6zpO/MU/GQwquEp/XhxVLLnoUSF0UZVS4gPfUXeKjrZsY9W/MxUJhBPIxN2jBuQj8 tY2wqfdIy6YwcSlwE3pfKHIDJU4yuqkYKwie+fFyEeHsq+cmrFa0eRVnCNucnOFgSM1K +dSRRRZi4BxtifB4Dt1gRlsiP/KKlWHbRFLEMO4z0pGlELZ5jGnKZHh4MWjttj183m6R 08nBUReegMfc5wWlaRTl8ZGWLOlLau1wstUOINt5MssFraXjbI28C8556IM6cK2lMlED 4QjA== X-Gm-Message-State: AOJu0Yy8TIdNJHTdGn0txTRQJi0c8MDXeLmBL6DKG49Ur3wOUYBjycEa oMk7AoTqRMxiWXz3C/I091Ea0jDiv/yWz/hXt4VG4CIaAxmc/q/0aie3nL4H2adWEz/sFRCKYRt 3scw1WBPGW8Fk677BAFhuyTj8EYr7hw36W4rHVfwgspAhdrpsXtab3lJVk4iYP2rqYGi4703Kfi cqAv14Yk4DS7Rsz0ZGTzPaYvTDaFhdN19A3NbxRCw= X-Gm-Gg: AeBDieuhUEHT+XOMxWpudIqj8aVMYdjJWEMi1G5Cqsc2IHWAxFlIGcJgVM+Gof5cw4o p+dBHKFhrKtfnA0frFN2JDHPlrjuq/cigRG9KFGGgC+XLX20sof6Lrwk1CNkxlWgGpjoQsLvYVr 8wMVPV5eWkhB0uB7LsNW6S1ZOCmv67cdpEERq27xuFsHLGWx6TENDsVRi5PnD6tTI24T/Z5zOEN 6+ai+/mCGVKWQBKqcKe/k2kdquxSGr5/egKMWVrPjE0M0Lt46q0Ej9r1jUty/B390kgwPRLB3M1 fAeVQmUzUhZ6eLDcSp4nG8eab+0kUg8vfe9lnSz00HVvZI7rCYZzZlKZjtQ4rsV9WQr1VW5rx+Z ApKCpakmBlSTTJXmQ5grG0U0Ld/njEDuPMPoGyGbgQW+k3UbXBYt01zjw+xIBBdkUpwppekXQtA == X-Received: by 2002:a05:6a20:9187:b0:3a2:dd8a:5087 with SMTP id adf61e73a8af0-3a2dd8a5ca7mr9849434637.46.1776853842128; Wed, 22 Apr 2026 03:30:42 -0700 (PDT) X-Received: by 2002:a05:6a20:9187:b0:3a2:dd8a:5087 with SMTP id adf61e73a8af0-3a2dd8a5ca7mr9849370637.46.1776853841586; Wed, 22 Apr 2026 03:30:41 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 02/10] hw/tpm: Refactor CRB_CTRL_START register access Date: Wed, 22 Apr 2026 16:00:10 +0530 Message-ID: <20260422103018.123608-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853937551158500 From: Arun Menon Replace manual bitwise operations with ARRAY_FIELD_DP32 macros No functional changes. Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/tpm/tpm_crb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 9555b2c62d..7edfbf8f8a 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -147,7 +147,7 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr add= r, tpm_crb_get_active_locty(s) =3D=3D locty) { void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); =20 - s->regs[R_CRB_CTRL_START] |=3D CRB_START_INVOKE; + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 1); s->cmd =3D (TPMBackendCmd) { .in =3D mem, .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), @@ -196,7 +196,7 @@ static void tpm_crb_request_completed(TPMIf *ti, int re= t) { CRBState *s =3D CRB(ti); =20 - s->regs[R_CRB_CTRL_START] &=3D ~CRB_START_INVOKE; + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 0); if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853893; cv=none; d=zohomail.com; s=zohoarc; b=iXYF2BxI7V661s1Y0YEFeDC+JBLTLiIXi4qVDqbNX/8c/zve5ghya0bT6FkdWbqb+VWFEdl0ASadGzA1vi8419Jz4WySWcE1zr5usCEsZgKN3Z/xTMx4/xHxHjvhr0cO+uz0X+liThyb+bQLqNAXrF1cPOTvu41fm4MVpwFgBP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853893; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=w09VoMzg1fFTcUiwTiAFUejpcn+BNU/liKIHZSDNJDE=; b=l/jd+UefqnMe1SNDOnd05VtZXcnGKzr6uoWf3m90zQony1132b4oTYF6Z9jsQI4oRm6u4xdDpia5FRBUIhI2cKHJEmPxPuvKvBFNnIa2KdBLbam8w+vMVEFSEvVtU3hkEvNEjfcpKjhIRDgKFxyvzA70XgiNgq2ttdIQGanlRAc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853893476519.7446743816688; Wed, 22 Apr 2026 03:31:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrH-0006jy-Po; Wed, 22 Apr 2026 06:31:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUr9-0006hn-Bq for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUr5-0006su-Gl for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:53 -0400 Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-b4992YsMNvCueeRxW_62hg-1; Wed, 22 Apr 2026 06:30:49 -0400 Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-35d9467e85aso5543008a91.0 for ; Wed, 22 Apr 2026 03:30:48 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:30:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853850; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=w09VoMzg1fFTcUiwTiAFUejpcn+BNU/liKIHZSDNJDE=; b=AmNTwlOObbs3q584/dH/u4pO0nI/aKEelLdvNVI8OvPgRskviUY3qzn6UwCBYCjt6dd7JE u60YaOEvApQpMtuf4t5rkbbNw7o5+g3zqziW/NypaGnGT/0M94c+2q+2fhoNyN6tVCZ0o9 m6WyPbNW5mkL3bmb/UaMh9wxX20Ll4w= X-MC-Unique: b4992YsMNvCueeRxW_62hg-1 X-Mimecast-MFC-AGG-ID: b4992YsMNvCueeRxW_62hg_1776853848 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853848; x=1777458648; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=w09VoMzg1fFTcUiwTiAFUejpcn+BNU/liKIHZSDNJDE=; b=MLGbtikxvdG8WH0il0Z5pDfxomNao80kt++/wBOdKz6aQn76TmvBvSPMn4jfc3knoq xO5lbLW22S/BPlD+9GQK74J5j36s8yyDRjN/uuXBv5c2OBISjPOxXSTDu3jlGF+EbONy zc3FE1FX0wJ4ln97e8s/kWRTgkRIgM9fjwAZu+fnijhsoVg6YOaDGYLnA6WXusSnWAbA sdlnIshzvVifIS5C+3g7O9miAfauJ/Bsiq8SdHNUq72A7sEn2aVGkVMJYpWQVZcEodsv QAsNSrv2IDmWqVxCyj8NApWrs5QrZ/BzEhzXKZTR0xYJhuP51UBOMoYyGtZhXPi8ZrO2 jH/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853848; x=1777458648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=w09VoMzg1fFTcUiwTiAFUejpcn+BNU/liKIHZSDNJDE=; b=quoUlT+AvwKm3GYKJ1Iv45YTVaCIwAd+1JLC4uPIhgI0S7x+DAY9JWKNhzr7NRIV3+ dqVLd5KyAjOE4igK4J0X91mPcCrD7jxapWN6t6XR9nbO9p3PXQM4f1mzJjbcE4fvpnU+ XYdbMCBoaw0C/NOISjIQLqRNJg+Ma/AjtSfzAMaZcVHvK+Jh3YqBoHNWBux7EmRC+YYX L3u2M5TvCbC4O/N7nUGbgUEehbbck48xEwVwjK2Ol1oRxwLqeKlfK0W1haEK01psZON1 3+kKaUbzCQtSRnC+o2Oa8dOuC/S9M89SYIqgRmb5Y+H5DU33Am1lbSwGzCyjmzLheyLm APvg== X-Gm-Message-State: AOJu0YxsluLlctdke4DrVPOGMrtV7BODFk73ofhsjvegbOW67rcTAJyl PgwWvbwlFWlpQ3KNIvaFn+QLhsd2rhS86mnK4vYDbOPRf97MicWKSsmEcuATD0MTdR4+u9lSSBg 2FRcJcZb9mMnI8q0rE9pOOMlT8b692VZ3eXhEuygCRTvunHQLDmFAjjk7lym3QOmHPg1UvRscEf GPDQLHuPX+K6lXm7GFAfQ/XWTPNwxeezQFbTH/+V0= X-Gm-Gg: AeBDietFiBEKVjkvI4Bocg7kAGKDvzMC0u4XSczzv64EdKhZlk/mX0DnRnhyXum23/B iFbBE74TCrCYTd92Za+zerVpWityNuUIcBgSHBL9EqY6jzKlRhHrEth+JtlDYOMLogJr7SyKxzX SJ/gxi0tJ4Rp/Alv1g/VP7ATkbOk2toYXq5PgV1S4JU88AGIZ7KvrBLTwwgK5djBAkBU5eqodHe xnueckkA4MomL+lb/49E6SZLIOiYUbAKrid4gNOZzmkeyrm9+qaD2Nu4n8c5fMRBOHzdGHRQ0U8 iBXUAV2gYc6817KO5NWnq0k4a63kjI9rWd0fYTL5yByZjykxNR6BKfVzoNnh+h9mR+r051kKN7Y caeClwfDfyyvjddF5V1b/x5N3JkRu4YjfLdTVAPY2/NwW3gR0uq8Tdxyq8Ws/aREsTAPBQ7ie5g == X-Received: by 2002:a05:6a20:3d85:b0:398:7912:cb05 with SMTP id adf61e73a8af0-3a08d8a3841mr25864897637.38.1776853847745; Wed, 22 Apr 2026 03:30:47 -0700 (PDT) X-Received: by 2002:a05:6a20:3d85:b0:398:7912:cb05 with SMTP id adf61e73a8af0-3a08d8a3841mr25864819637.38.1776853847044; Wed, 22 Apr 2026 03:30:47 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon Subject: [PATCH v5 03/10] hw/tpm: Add internal buffer state for chunking Date: Wed, 22 Apr 2026 16:00:11 +0530 Message-ID: <20260422103018.123608-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853895908158500 From: Arun Menon - Introduce GByteArray buffers to hold the command request and response data during chunked TPM CRB transactions. - Add helper function to clean them. Signed-off-by: Arun Menon Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 7edfbf8f8a..e7ec9d0679 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -38,10 +38,13 @@ struct CRBState { TPMBackend *tpmbe; TPMBackendCmd cmd; uint32_t regs[TPM_CRB_R_MAX]; + size_t be_buffer_size; MemoryRegion mmio; MemoryRegion cmdmem; =20 - size_t be_buffer_size; + GByteArray *command_buffer; + GByteArray *response_buffer; + uint32_t response_offset; =20 bool ppi_enabled; TPMPPI ppi; @@ -87,6 +90,13 @@ enum crb_cancel { =20 #define TPM_CRB_NO_LOCALITY 0xff =20 +static void tpm_crb_clear_internal_buffers(CRBState *s) +{ + g_byte_array_set_size(s->response_buffer, 0); + g_byte_array_set_size(s->command_buffer, 0); + s->response_offset =3D 0; +} + static uint64_t tpm_crb_mmio_read(void *opaque, hwaddr addr, unsigned size) { @@ -136,9 +146,11 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr ad= dr, } break; case A_CRB_CTRL_CANCEL: - if (val =3D=3D CRB_CANCEL_INVOKE && - s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { - tpm_backend_cancel_cmd(s->tpmbe); + if (val =3D=3D CRB_CANCEL_INVOKE) { + if (s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { + tpm_backend_cancel_cmd(s->tpmbe); + } + tpm_crb_clear_internal_buffers(s); } break; case A_CRB_CTRL_START: @@ -243,6 +255,7 @@ static void tpm_crb_reset(void *dev) tpm_ppi_reset(&s->ppi); } tpm_backend_reset(s->tpmbe); + tpm_crb_clear_internal_buffers(s); =20 memset(s->regs, 0, sizeof(s->regs)); =20 @@ -309,6 +322,9 @@ static void tpm_crb_realize(DeviceState *dev, Error **e= rrp) memory_region_add_subregion(get_system_memory(), TPM_CRB_ADDR_BASE + sizeof(s->regs), &s->cmdmem); =20 + s->command_buffer =3D g_byte_array_new(); + s->response_buffer =3D g_byte_array_new(); + if (s->ppi_enabled) { tpm_ppi_init(&s->ppi, get_system_memory(), TPM_PPI_ADDR_BASE, OBJECT(s)); @@ -321,12 +337,21 @@ static void tpm_crb_realize(DeviceState *dev, Error *= *errp) } } =20 +static void tpm_crb_unrealize(DeviceState *dev) +{ + CRBState *s =3D CRB(dev); + + g_clear_pointer(&s->command_buffer, g_byte_array_unref); + g_clear_pointer(&s->response_buffer, g_byte_array_unref); +} + static void tpm_crb_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); TPMIfClass *tc =3D TPM_IF_CLASS(klass); =20 dc->realize =3D tpm_crb_realize; + dc->unrealize =3D tpm_crb_unrealize; device_class_set_props(dc, tpm_crb_properties); dc->vmsd =3D &vmstate_tpm_crb; dc->user_creatable =3D true; --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853913; cv=none; d=zohomail.com; s=zohoarc; b=TVGczDqXuthx10gTbgwJjXICi3ptOYKYoq4tGvcjjGboRXHcAtqsmDZOpi8WeEwfIZj5cTHdtdeU4qdCLxg092lXdZhtYTx/EEzZaJjW6g+nnbM41fGuM1vUUMUNob1AT4/NJb5NeZPopzJIPFdyHnw7IbjKotBSasx5wtOE+bg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853913; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NLr0qXJ7fAigQtbt+dX50644FqGIf04RPB9U5wAO/9w=; b=QmdKj9AvubXwt6kzh5kfizWMbykPmvqjFiRmH6m/lMb/eaKWsid3eG6V4TUIvqxlwnIB4RFtG1zEMgY4VPyhZwXxOObQbkLpXeFwfn6pgcAwoBfjgFXE7oTOmWLxmxGu7o2+4kZkqI20ARzMXwnFpEJRrnGvfZC5e3OH60U0Luc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853913547517.4554604285822; Wed, 22 Apr 2026 03:31:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrW-0006nQ-SQ; Wed, 22 Apr 2026 06:31:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrD-0006il-S7 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrA-0006tU-RT for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:30:59 -0400 Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-607--koioQ0VPlWsgEy8ES2Gbw-1; Wed, 22 Apr 2026 06:30:54 -0400 Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-358e95e81aeso3685983a91.0 for ; Wed, 22 Apr 2026 03:30:54 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:30:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853855; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NLr0qXJ7fAigQtbt+dX50644FqGIf04RPB9U5wAO/9w=; b=g7gCTnc/2/6UH4aQn0OVOp5X+1Add2ovDyrLYjd0RYhu9qarD75VT90OoTGH3ymOvnLeN1 0zUi+v1NJQNWvsPplQHmFHsJ6DDkeJI4ptyysaJdLAb8UKoUyG0IjpBsyBTNgdC3vBTtBh CG1MUfJik+jq6q90O6rKcKOkl/ZwNjo= X-MC-Unique: -koioQ0VPlWsgEy8ES2Gbw-1 X-Mimecast-MFC-AGG-ID: -koioQ0VPlWsgEy8ES2Gbw_1776853853 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853853; x=1777458653; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NLr0qXJ7fAigQtbt+dX50644FqGIf04RPB9U5wAO/9w=; b=iHjTyPuQHQhDOkBj/h5Ek84P5tcB6yPZEGjQ7UXgEUZLftTP0wZazd04ETw280h4KT GC3d7giryQDtMwIM2XXR+X7FknvLHFBcxrvbPeQnk/DbEHgoxf/Hya7n7j5hv5b6ls4d VoXqQZx02ILen7lXVp6QHBE9kQZqd9SHfzgM9oXdItFOIbhMVw+vtYI3ULyJ+6gYHGlT oP18gODmj4czIJCwp9IA4ryRfEvKpFCly+/cZ38MZNH6rPulNxA0a03Qa2q6aCaYkSpN OJ4HlUUefAkwL2wPaGi519w3lYUOQFvSA0JL53KEiXXxzy3GG7GsQKLGpIHPBgEdMYXX lIUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853853; x=1777458653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=NLr0qXJ7fAigQtbt+dX50644FqGIf04RPB9U5wAO/9w=; b=Sdh8E22064XwnKSOOX3Q6WVSVP0ksy2TZyGKnd7CKUmh/516a/Y1SpX/IUsBKX4VuU SSE45xKQSj6BYU2TIufya8dhn9V8fh0E1OdCSZxneWhdAqPosmDkmLVR6EbPKtVxRuFp gBAVdaRA4MuNq15EB4WjCOwRH3LBkVwb3GU78scGYbrOlOUJQ8whCIrAVVxJvbGOMwmN Hh7QpWHJ6UaQ33isrc8Gxe0pZ3mqnJIQl8+7hI+HTeqc0UeSj3eFHQuo55wN/PObMfwD Ce9eEVjYhYR/b7k438DFJgm997LW0P2Gh4SeeS00/uyqiUR7SxhABDduoZABWCF5iLxJ R0xg== X-Gm-Message-State: AOJu0YzCTkKlWsbnMG8PnjjXi0RU8l2Nd1Y9gmsR4D9B0YcZdILBGIIE FZDZMgu7IppI1Xmaog6zjx2u5+AjS0FdI9oXelPPGzbVHyTu9hLOUNciictOVaQmksEHwlakpxF +uam3b/j/aQgMErhwbSWVexj6Ua+AU5ZxSwgRmdzMa/Qyb/sSQ3I6B+4Yna/dWY/bMp/VMqyd7E zE3sIt33u7u0UiJWgNlvI+yExdLavg9UkL1VMEez4= X-Gm-Gg: AeBDievSD2zQ7UEI0BtUzchLBauh6YDwOgFPn6VznjquN48bpg5zkXdeRGVC4sGi13N DVvkjG9o2m2qIdjaR6tSJ3B25sX55r1VzRfPVhBDBDdvJkrXOslhJOcUCWvLpio9yk7svn6QOtJ cwwaOHl+wcbKJCyTsGlq5DPa2LeJIRlagtOcg6BEXd2aTMBPUoz74rsT9KaMfppZ7r65ICfn3sV Lg9ewAM11hn/2+6XGbF2nleMeTQLQmJz/2cabPF6r7ORzrNMT2m8gkrHHZlw01gE5bhHuiffcfo y8KglbRf8ARg7Nv7erdoSlOJvei8a/3gypZHpR5gLnyd3c7B8tem9xkpSiFUkFgBcHiRy439vMm cI2l6yg+HsrbfxDztIpABgyVSy7xgCrV54ZlZN0DBrmRejt1R3ILGePHU38lb13eRkJQt9ofz8g == X-Received: by 2002:a05:6a20:eed1:10b0:38b:eadd:449a with SMTP id adf61e73a8af0-3a08d8fda47mr14918573637.38.1776853853027; Wed, 22 Apr 2026 03:30:53 -0700 (PDT) X-Received: by 2002:a05:6a20:eed1:10b0:38b:eadd:449a with SMTP id adf61e73a8af0-3a08d8fda47mr14918532637.38.1776853852546; Wed, 22 Apr 2026 03:30:52 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 04/10] hw/tpm: Implement TPM CRB chunking logic Date: Wed, 22 Apr 2026 16:00:12 +0530 Message-ID: <20260422103018.123608-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853916658154100 From: Arun Menon - Add logic to populate internal TPM command request and response buffers and to toggle the control registers after each operation. - The chunk size is limited to CRB_CTRL_CMD_SIZE which is (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER). This comes out as 3968 bytes (4096 - 128 or 0x1000 - 0x80), because 128 bytes are reserved for control and status registers. In other words, only 3968 bytes are available for the TPM data. - With this feature, guests can send commands larger than 3968 bytes. - Refer section 6.5.3.9 of [1] for implementation details. [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_Pub.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/tpm/tpm_crb.c | 154 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 137 insertions(+), 17 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index e7ec9d0679..29370d6f49 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -17,6 +17,7 @@ #include "qemu/osdep.h" =20 #include "qemu/module.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "system/address-spaces.h" #include "hw/core/qdev-properties.h" @@ -67,6 +68,7 @@ DECLARE_INSTANCE_CHECKER(CRBState, CRB, #define CRB_INTF_CAP_CRB_CHUNK 0b1 =20 #define CRB_CTRL_CMD_SIZE (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER) +#define TPM_HEADER_SIZE 10 =20 enum crb_loc_ctrl { CRB_LOC_CTRL_REQUEST_ACCESS =3D BIT(0), @@ -82,6 +84,8 @@ enum crb_ctrl_req { =20 enum crb_start { CRB_START_INVOKE =3D BIT(0), + CRB_START_RSP_RETRY =3D BIT(1), + CRB_START_NEXT_CHUNK =3D BIT(2), }; =20 enum crb_cancel { @@ -124,6 +128,69 @@ static uint8_t tpm_crb_get_active_locty(CRBState *s) return ARRAY_FIELD_EX32(s->regs, CRB_LOC_STATE, activeLocality); } =20 +static bool tpm_crb_append_command_request(CRBState *s) +{ + /* + * The linux guest writes the TPM command to the MMIO region in chunks. + * This function appends a chunk from the MMIO region to internal + * command_buffer. + */ + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); + uint32_t to_copy =3D 0; + uint32_t total_request_size =3D 0; + + /* + * The initial call extracts the total TPM command size + * from its header. For the subsequent calls, the data already + * appended in the command_buffer is used to calculate the total + * size, as its header stays the same. + */ + if (s->command_buffer->len =3D=3D 0) { + total_request_size =3D tpm_cmd_get_size(mem); + if (total_request_size < TPM_HEADER_SIZE) { + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + tpm_crb_clear_internal_buffers(s); + error_report("Command size %" PRIu32 " less than " + "TPM header size %" PRIu32, + total_request_size, (uint32_t)TPM_HEADER_SIZE); + return false; + } + } else { + total_request_size =3D tpm_cmd_get_size(s->command_buffer->data); + } + total_request_size =3D MIN(total_request_size, s->be_buffer_size); + + if (total_request_size > s->command_buffer->len) { + uint32_t remaining =3D total_request_size - s->command_buffer->len; + to_copy =3D MIN(remaining, CRB_CTRL_CMD_SIZE); + g_byte_array_append(s->command_buffer, (guint8 *)mem, to_copy); + } + return true; +} + +static void tpm_crb_fill_command_response(CRBState *s) +{ + /* + * Response from the tpm backend will be stored in the internal + * response_buffer. This function will serve that accumulated response + * to the linux guest in chunks by writing it back to MMIO region. + */ + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); + uint32_t remaining =3D s->response_buffer->len - s->response_offset; + uint32_t to_copy =3D MIN(CRB_CTRL_CMD_SIZE, remaining); + + memcpy(mem, s->response_buffer->data + s->response_offset, to_copy); + + if (to_copy < CRB_CTRL_CMD_SIZE) { + memset((guint8 *)mem + to_copy, 0, CRB_CTRL_CMD_SIZE - to_copy); + } + + s->response_offset +=3D to_copy; + memory_region_set_dirty(&s->cmdmem, 0, CRB_CTRL_CMD_SIZE); +} + static void tpm_crb_mmio_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { @@ -154,20 +221,61 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr a= ddr, } break; case A_CRB_CTRL_START: - if (val =3D=3D CRB_START_INVOKE && - !(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) && - tpm_crb_get_active_locty(s) =3D=3D locty) { - void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); - - ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 1); - s->cmd =3D (TPMBackendCmd) { - .in =3D mem, - .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), - .out =3D mem, - .out_len =3D s->be_buffer_size, - }; - - tpm_backend_deliver_request(s->tpmbe, &s->cmd); + if (tpm_crb_get_active_locty(s) !=3D locty) { + break; + } + if (s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { + /* + * Backend TPM is busy processing a request. + */ + break; + } + if (val & CRB_START_INVOKE) { + if (!(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE)) { + if (!tpm_crb_append_command_request(s)) { + break; + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 1); + g_byte_array_set_size(s->response_buffer, s->be_buffer_siz= e); + s->cmd =3D (TPMBackendCmd) { + .in =3D s->command_buffer->data, + .in_len =3D s->command_buffer->len, + .out =3D s->response_buffer->data, + .out_len =3D s->response_buffer->len, + }; + tpm_backend_deliver_request(s->tpmbe, &s->cmd); + } + } else if (val & CRB_START_NEXT_CHUNK) { + if (!s->cap_chunk) { + break; + } + /* + * nextChunk is used both while sending and receiving data. + * To distinguish between the two, response_buffer is checked. + * If it does not have data, then that means we have not yet + * sent the command to the tpm backend, and therefore call + * tpm_crb_append_command_request(). + */ + if (s->response_buffer->len > 0 && + s->response_offset < s->response_buffer->len) { + tpm_crb_fill_command_response(s); + } else { + if (!tpm_crb_append_command_request(s)) { + break; + } + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + } else if (val & CRB_START_RSP_RETRY) { + if (!s->cap_chunk) { + break; + } + if (s->response_buffer->len > 0) { + trace_tpm_crb_mmio_write(addr, size, val); + s->response_offset =3D 0; + tpm_crb_fill_command_response(s); + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, crbRspRetry, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); } break; case A_CRB_LOC_CTRL: @@ -212,8 +320,21 @@ static void tpm_crb_request_completed(TPMIf *ti, int r= et) if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ + tpm_crb_clear_internal_buffers(s); + } else { + uint32_t actual_resp_size =3D tpm_cmd_get_size(s->response_buffer-= >data); + uint32_t total_resp_size =3D MIN(actual_resp_size, s->be_buffer_si= ze); + g_byte_array_set_size(s->response_buffer, total_resp_size); + s->response_offset =3D 0; } - memory_region_set_dirty(&s->cmdmem, 0, CRB_CTRL_CMD_SIZE); + /* + * Send the first chunk. Subsequent chunks will be sent + * on receiving nextChunk from the guest + */ + tpm_crb_fill_command_response(s); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, crbRspRetry, 0); + g_byte_array_set_size(s->command_buffer, 0); } =20 static enum TPMVersion tpm_crb_get_version(TPMIf *ti) @@ -291,8 +412,7 @@ static void tpm_crb_reset(void *dev) s->regs[R_CRB_CTRL_RSP_SIZE] =3D CRB_CTRL_CMD_SIZE; s->regs[R_CRB_CTRL_RSP_ADDR] =3D TPM_CRB_ADDR_BASE + A_CRB_DATA_BUFFER; =20 - s->be_buffer_size =3D MIN(tpm_backend_get_buffer_size(s->tpmbe), - CRB_CTRL_CMD_SIZE); + s->be_buffer_size =3D tpm_backend_get_buffer_size(s->tpmbe); =20 if (tpm_backend_startup_tpm(s->tpmbe, s->be_buffer_size) < 0) { exit(1); --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853917; cv=none; d=zohomail.com; s=zohoarc; b=UDhsdwrYqYmZKVAL/2WsOzO4q9p3sJrWQaoeOxCKT4dkEdvNWzbdWrXP1bD/rpYlC4Ijr5ot0IW2+thNmF+L3jVarUKTCXYNymtuwH15zfRXCtFdn98ZL4sCfXjMWG8qVDDPRDQGb3x2g6xAd7VLRyjhq8L0dRG037dM6elg5JY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853917; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=CDs22K0lSTE452mYxqogQUQOSxX7P+yyFQB75fSJyTtpotsq4HcFWKPrQz6/Ur+/icpS4t7bbAQi9mh1JYIar8k3oHmX0wfCc25XEfgL8OnEafi2powYtGxzggYkPREoaTvEXTyTic3g3qitb2JqDSoVeXBRu2t2aDVxQ8H81Oc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853917026427.797059308146; Wed, 22 Apr 2026 03:31:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrV-0006mC-1C; Wed, 22 Apr 2026 06:31:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrH-0006kH-UD for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrF-0006uM-QZ for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:03 -0400 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-500-ovMs-HqcMIabfF6hPgVH2A-1; Wed, 22 Apr 2026 06:30:59 -0400 Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-358e95e81aeso3686083a91.0 for ; Wed, 22 Apr 2026 03:30:59 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:30:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853861; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=f5eGd1UoiGwpjCxZMev34vTS8ViWHZ+ZUyvsNyUMhO5hpl6YWppwd382k3/UQlI1xrj0Hi nxqlJ9dvCP86I94SMqwqfrfWC2sdM/YzI6xK5CzazVn5GWHSPG7h5WqolblmVaTeoR0qBL UAaW41GfF0aSFbmyTq4+hGTuUNJSIKA= X-MC-Unique: ovMs-HqcMIabfF6hPgVH2A-1 X-Mimecast-MFC-AGG-ID: ovMs-HqcMIabfF6hPgVH2A_1776853859 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853858; x=1777458658; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=QCgYEqI78QDGT4CZGy656JyNoJ2PFtLfmIeU33k5qap41UvhXZf7tco+T4kEHGOZDb BVCmjLzcZN821UhpR7Q9jZ4MSvKSXHrQ6l1WMBI9Vty1kBH2XvoivO6uqTTjFhKGST9g dEtazdkU+lGD1XbFtIacufbw/0aBVnMK3BVTaAik0uAIxatGWX8GbNi7uYS3+Q/rUYIO 5Nj7biTBGYlitxNvPgeP5UtAX57yVmyhqt0Fgvuje2rc6yt/yagkSmVqXFCm8UXrTNJ2 jDnFrdtmMDFI+g/jLhGdL9unH1rQdoKYwv3kzbku+pYLG74WoRZm3S3JVySEQ5Nafdxx TQPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853858; x=1777458658; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=ZGR6yJ1Sxm9ykQPo+yv88SC6O7mk/Q6ARjgbCgu5gIN6rOTT9PtLIZo66zFKxNwvfe mY79/YTlYXeZedpyof4AYh9ffmv6zMSH0cBRqEqDemJzL21bbMbSaLTDWe1Y1OA3MAS0 oAEgIp6jL4T7oiR2yMvuO32JGkmYrqkyadY7ulNIn7N+QBjI2yK3yPEsNEEPAuCtdvOo c1yTrFMqj+X9hxSfo+MxQLyB3GpZEdZKWZxq3bgoyQEGAY6KSfZWATCzVK89SKojY3RN BEk05qXouA2Ow19/Lw8iryHf2WI5vFvTweY5ETk/yQDn94viara+4+86WItCYCZcNuNc 2WmQ== X-Gm-Message-State: AOJu0YxLsNV2iNAJgsmYPJv9oUWGzK4RT07LylpNCuK4E9ThuqfUU2wj oc0RgO5f1clfdjuHEGYvGw2FBEsnt17sRYxFHaKCMhuZxxCcPrYCRDJYlSy/g3uBejucsWQ4yjg 6bd2VVqO84PsO6U081xIfV7U1lgd/V7g/aY8uwPovUrcJ1IrBvD8xJo2ujNmKu5LDla/TbNgRkK N5CSnbmavCwQD0mBg+TnnnKXuvzkeUEHbR/bGSxx4= X-Gm-Gg: AeBDieuiyKRFDzQwVJlmWFpPorDKrbWhSL8XmqYBFE5gJ8ubTXlXqtT32j12Zt+tK6S kO5/PYik4IJGxo+K4ZyuOKOzHHkD/k5sBis9x1+3ilxWAcUBxMZdZTp+rGbS4oMPUB//TFoSJak 27XgZANcORVFsd32oGTkLnCToIJMZ0t+ADDC2FDaRPB3FjYXoqSw/Kcbg1UclGHQ/m5lQAZp43b 8/qSBQjnupdVeCg5NIjOW1MOcjboQnAYlSFeN0F5pxa/raiy/LQ3UIbrf06TpaisgFcYYkXyDCp 99MhfBUugC+KfyrEACBcKXMkaaAxB3YpW6dcjM1wbjNanAmt4ubZI3LbPXAsFnrkYSfeFR9gi0M Y0GWAdo1eWKx0ceCPeXvT7D5Ahf0jF8cO5NUk6B32Jhe/mI6an3LzwWpGIWIUvApwujKXC5kA8g == X-Received: by 2002:a05:6a20:3c90:b0:39c:cdb:5d85 with SMTP id adf61e73a8af0-3a08d909cd0mr25433106637.46.1776853858241; Wed, 22 Apr 2026 03:30:58 -0700 (PDT) X-Received: by 2002:a05:6a20:3c90:b0:39c:cdb:5d85 with SMTP id adf61e73a8af0-3a08d909cd0mr25433044637.46.1776853857613; Wed, 22 Apr 2026 03:30:57 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon Subject: [PATCH v5 05/10] test/qtest: Add test for tpm crb chunking Date: Wed, 22 Apr 2026 16:00:13 +0530 Message-ID: <20260422103018.123608-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853918517154100 From: Arun Menon - New test case added to the swtpm test. Data is written and read from the buffer in chunks. - The chunk size is dynamically calculated by reading the CRB_CTRL_CMD_SIZE address. This can be changed manually to test. - Add a helper function tpm_wait_till_bit_clear() - Note that this commit does not yet exercise the chunked read/write logic, as current transfer sizes remain small. Testing for large transfers is introduced in a subsequent patch: 'tests: Use ML-DSA-87 operations to cause large TPM transfers with CRB' Signed-off-by: Arun Menon Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Stefan Berger --- tests/qtest/tpm-crb-swtpm-test.c | 10 +++ tests/qtest/tpm-util.c | 110 ++++++++++++++++++++++++++----- tests/qtest/tpm-util.h | 5 ++ 3 files changed, 110 insertions(+), 15 deletions(-) diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-t= est.c index ffeb1c396b..050c7b0c1f 100644 --- a/tests/qtest/tpm-crb-swtpm-test.c +++ b/tests/qtest/tpm-crb-swtpm-test.c @@ -33,6 +33,14 @@ static void tpm_crb_swtpm_test(const void *data) "tpm-crb", NULL); } =20 +static void tpm_crb_chunk_swtpm_test(const void *data) +{ + const TestState *ts =3D data; + + tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer, + "tpm-crb", NULL); +} + static void tpm_crb_swtpm_migration_test(const void *data) { const TestState *ts =3D data; @@ -54,6 +62,8 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 qtest_add_data_func("/tpm/crb-swtpm/test", &ts, tpm_crb_swtpm_test); + qtest_add_data_func("/tpm/crb-chunk-swtpm/test", &ts, + tpm_crb_chunk_swtpm_test); qtest_add_data_func("/tpm/crb-swtpm-migration/test", &ts, tpm_crb_swtpm_migration_test); ret =3D g_test_run(); diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index 2cb2dd4796..744592763f 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -14,16 +14,44 @@ =20 #include "qemu/osdep.h" #include +#include "qemu/bswap.h" =20 #include "hw/acpi/tpm.h" #include "libqtest.h" #include "tpm-util.h" #include "qobject/qdict.h" =20 +#define CRB_ADDR_START (TPM_CRB_ADDR_BASE + A_CRB_CTRL_START) +#define CRB_ADDR_CTRL_STS (TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS) +#define CRB_ADDR_CTRL_CMD_SIZE \ + (TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_SIZE) + +#define CRB_START_INVOKE (1 << 0) +#define CRB_START_RSP_RETRY (1 << 1) +#define CRB_START_NEXT_CHUNK (1 << 2) + +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask) +{ + uint32_t sts; + uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; + + while (true) { + sts =3D qtest_readl(s, addr); + if ((sts & mask) =3D=3D 0) { + break; + } + if (g_get_monotonic_time() >=3D end_time) { + g_assert_cmphex(sts & mask, =3D=3D, 0); + break; + } + } +} + void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size) { + uint32_t tpm_sts; uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); =20 @@ -31,24 +59,76 @@ void tpm_util_crb_transfer(QTestState *s, =20 qtest_memwrite(s, caddr, req, req_size); =20 - uint32_t sts, start =3D 1; - uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; - qtest_writel(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START, start); - while (true) { - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - if ((start & 1) =3D=3D 0) { - break; + qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE); + + tpm_sts =3D qtest_readl(s, CRB_ADDR_CTRL_STS); + g_assert_cmpint(tpm_sts & 1, =3D=3D, 0); + + qtest_memread(s, raddr, rsp, rsp_size); +} + +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size) +{ + uint32_t tpm_sts; + size_t chunk_size; + + uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); + uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); + uint32_t crb_ctrl_cmd_size =3D qtest_readl(s, CRB_ADDR_CTRL_CMD_SIZE); + + chunk_size =3D crb_ctrl_cmd_size; + + qtest_writeb(s, TPM_CRB_ADDR_BASE + A_CRB_LOC_CTRL, 1); + + for (size_t i =3D 0; i < req_size; i +=3D chunk_size) { + bool last_chunk =3D false; + size_t current_chunk_size =3D chunk_size; + + if (i + chunk_size > req_size) { + last_chunk =3D true; + current_chunk_size =3D req_size - i; } - if (g_get_monotonic_time() >=3D end_time) { - break; + + qtest_memwrite(s, caddr, req + i, current_chunk_size); + + if (last_chunk) { + qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE); + } else { + qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUN= K); } - }; - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - g_assert_cmpint(start & 1, =3D=3D, 0); - sts =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS); - g_assert_cmpint(sts & 1, =3D=3D, 0); + } + tpm_sts =3D qtest_readl(s, CRB_ADDR_CTRL_STS); + g_assert_cmpint(tpm_sts & 1, =3D=3D, 0); =20 - qtest_memread(s, raddr, rsp, rsp_size); + /* + * Read response in chunks + */ + + unsigned char header[10]; + uint32_t actual_response_size =3D 0; + + qtest_memread(s, raddr, header, sizeof(header)); + actual_response_size =3D ldl_be_p(&header[2]); + + if (actual_response_size > rsp_size) { + actual_response_size =3D rsp_size; + } + + for (size_t i =3D 0; i < actual_response_size; i +=3D chunk_size) { + size_t to_read =3D i + chunk_size > actual_response_size + ? actual_response_size - i + : chunk_size; + if (i > 0) { + qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUN= K); + } + qtest_memread(s, raddr, rsp + i, to_read); + } } =20 void tpm_util_startup(QTestState *s, tx_func *tx) diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index 0cb28dd6e5..681544e7d8 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -24,10 +24,15 @@ typedef void (tx_func)(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask); void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size); + void tpm_util_startup(QTestState *s, tx_func *tx); void tpm_util_pcrextend(QTestState *s, tx_func *tx); void tpm_util_pcrread(QTestState *s, tx_func *tx, --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853892; cv=none; d=zohomail.com; s=zohoarc; b=YCvlhi0Yg9Dg9Tdgl93+W8j2eG3kMX8COgmXRsMl9uVtpq3xk2REjGp9jaEUo/5pbf1fSSKHoOhWB2uQY06egGOcXgLEuRqHwYLNK9O2e5F24JUPt7J0OJ1NRrcq1kHgWxN2bbXEn013DO83xghWX0H9PEfkk7C7K+2mGL6SUAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853892; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+nQzf/D0K64i/5OlXj6ts+ZQEQEq47laODMb54sHduo=; b=C/TaflVfWzytNAAyHOLGPRGdRLHDjrnDsv7an1o2tmgrZbHXiv3hcp+qYoaEU7LmmKq26LPTQHQesm0GwlqoQzVxcVNXU3CNiRU5flaLo45mRirxBGNn4B05TltOxPqBwJbkcLCWVOEagJNWRy3ei8VO/ORuutKS6MAwkk6ftSs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853892409189.22877231952486; Wed, 22 Apr 2026 03:31:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrY-0006nt-00; Wed, 22 Apr 2026 06:31:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrW-0006n8-AQ for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:18 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrQ-0006zz-Ee for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:17 -0400 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-324-DGL65jU2NcOYnDvPN2NfKg-1; Wed, 22 Apr 2026 06:31:05 -0400 Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-354490889b6so8014941a91.3 for ; Wed, 22 Apr 2026 03:31:05 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.30.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:31:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853871; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+nQzf/D0K64i/5OlXj6ts+ZQEQEq47laODMb54sHduo=; b=DpvBnVA3cQpLU4WFDtLJzw00cIzJSy+Pcqh0EZCFLO9jJNb0YnHEm4nlqtQlxEGNPiwU3O OLplxaLu8TPEfLvl5rSk6LVWC14aKQBS7kqqAzbach0ws1frnobmBvwqrqB7AcGPz3rttJ Sk7xgLW3XWgoWDLNTwovmxE8MtFF4jA= X-MC-Unique: DGL65jU2NcOYnDvPN2NfKg-1 X-Mimecast-MFC-AGG-ID: DGL65jU2NcOYnDvPN2NfKg_1776853865 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853864; x=1777458664; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+nQzf/D0K64i/5OlXj6ts+ZQEQEq47laODMb54sHduo=; b=Qce0hFwwJKq1RxoF34MKnqzE/Maerx3M1aCzHCwOqN+yKUnhtCypB/LGNafkDCXt3Y keRuh65NFB82LkP1FnrUKPCSkkA/rYHude3JphfCT7cJa8ab9qSSae8oQRGbZ03i2/IU x59ivul+qXYRmRNDNKMNQqK2MqoEyITldXCzUUIR4baS5YeEdbfng+vDP30BH+/rAw3v 2/08WZHzmDi9Lyk1ZGySAQdfiJSwR4+mz9NqsYH6diLtMXn9zxLjopvqjy5fFffoG05F fp/pkRTwoBtxb1dzYZ5oN0yP8AuOAFmhQL0eHdIQNR4j9CKSPyzB9I4MMYnjM4oWyV+o 0rgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853864; x=1777458664; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+nQzf/D0K64i/5OlXj6ts+ZQEQEq47laODMb54sHduo=; b=kdIe6XiUmSnjdqmzg1GdNb5aXG/YpZHdjdTur8LELofrVt+MK9yetm4GOPS8L0T7KS qufgJUsqW9dA/doshIZ4hQ+uxVA1sOxrN9A6vq2jSHhaEzd+mZYSrMIwxXLShYZhbosA DlOM4LTxL3Gw8fa3mcz87bTKWgpugUH1uTxfRYNE+vMEe/kD9ji++QXFIAoN29AJWia+ LJSLVPOHMQedzd4Kmc9hF9/x3aThx+OeJCMXiH0TBBA9Iugb0QOuG8mPmCZx/NVLUrG5 rdeoW//ZK2SKxi7a4JPJ0K8oAbYrroeQIvgWAiq+Zxpx2m6XkUscUcId74K1daq9o20b fQmA== X-Gm-Message-State: AOJu0YxN2KhkmHshXh33vj261tQt/rHue5sheUTroQubezO+IHSAnarS iID5syqOuWLWytlYhL/kXHcJBGf8xSzSWIvG/cuUNzGCrgU8XofeLcOYKZ4UVhGW2qltA2S/FIJ +TNHbzYjF98b8IOy1cY+aS0y82uXzYFz4LLA5qo5V6yqihV/pY0xiKay3hMJIpgNhc1MP9y8JXa MSaj3eaN9nWFeSj5OQ/s5J21jaivpu44sy4qp8K6E= X-Gm-Gg: AeBDievUUIWT3Ou1wN7f6YDzFEH8XfTZAS4KA9EhhmarM2knMrg/JB6peeb7Toyb9fF NQZdVRYoRr4ti0OKKXoNeQKzFd8c7r4vxgfcut3lRaZsMNBkVFHILEc56X9gxutxwza5bWrbNPS mxPXdYTSUDrh//Tp+mFC43ZKGMATuYlA5aoQDr8kSJlGHNUX4WITA3t1Gbub+7LGugDKSvKMjjH g1m6pqCWnuCodvc6Y/4wPqVPvi/5PNJdivG1d5X98ch8yLja9hIkvMmjPwdkg0t8KNSwWCMMEFJ Gw8V+X/JX6kXotqssI3Wzle0fcWZ8dsnwr/qOMFE+JVDCL2M+N1bJ6YMoTBMkZwTFmtz9zCAPXZ KURJ/g1WWpf8sFG/lwwh0AH2pDR4/J8oCbHwgeY3pm3pomX+hJKCqpU5Fnoz9xGhBWXq5AhtxpQ == X-Received: by 2002:a17:90b:5543:b0:35f:b227:db86 with SMTP id 98e67ed59e1d1-361403af6a5mr22338597a91.2.1776853864438; Wed, 22 Apr 2026 03:31:04 -0700 (PDT) X-Received: by 2002:a17:90b:5543:b0:35f:b227:db86 with SMTP id 98e67ed59e1d1-361403af6a5mr22338531a91.2.1776853863655; Wed, 22 Apr 2026 03:31:03 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon Subject: [PATCH v5 06/10] hw/tpm: Add support for VM migration with TPM CRB chunking Date: Wed, 22 Apr 2026 16:00:14 +0530 Message-ID: <20260422103018.123608-7-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853894588154100 Content-Type: text/plain; charset="utf-8" From: Arun Menon - Add subsection in VMState for TPM CRB with the newly introduced command and response buffer GByteArrays, along with a needed callback, so that newer QEMU only sends the buffers if it is necessary. - Implement a migration blocker to prevent migration of the VM if the user manually enables chunking capability, cap-chunk, but the machine type does not support it, using a new hw_compat property called allow_chunk_migration. - Add a post_load_errp hook so that during a migration, the buffers are validated before destination VM is started. Signed-off-by: Arun Menon --- hw/core/machine.c | 1 + hw/tpm/tpm_crb.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6d27cf69a2..b590af0125 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -40,6 +40,7 @@ =20 GlobalProperty hw_compat_11_0[] =3D { { "tpm-crb", "cap-chunk", "off"}, + { "tpm-crb", "x-allow-chunk-migration", "off"}, }; const size_t hw_compat_11_0_len =3D G_N_ELEMENTS(hw_compat_11_0); =20 diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 29370d6f49..23e6948aee 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -24,6 +24,7 @@ #include "hw/pci/pci_ids.h" #include "hw/acpi/tpm.h" #include "migration/vmstate.h" +#include "migration/blocker.h" #include "system/tpm_backend.h" #include "system/tpm_util.h" #include "system/reset.h" @@ -51,6 +52,8 @@ struct CRBState { TPMPPI ppi; =20 bool cap_chunk; + bool allow_chunk_migration; + Error *migration_blocker; }; typedef struct CRBState CRBState; =20 @@ -353,12 +356,63 @@ static int tpm_crb_pre_save(void *opaque) return 0; } =20 +static bool tpm_crb_chunk_needed(void *opaque) +{ + CRBState *s =3D opaque; + + if (!s->allow_chunk_migration) { + return false; + } + + return ((s->command_buffer && s->command_buffer->len > 0) || + (s->response_buffer && s->response_buffer->len > 0)); +} + +static bool tpm_crb_chunk_post_load(void *opaque, int version_id, Error **= errp) +{ + CRBState *s =3D opaque; + + if (!s->response_buffer || !s->command_buffer) { + error_setg(errp, "tpm-crb: Internal buffers are not allocated"); + return false; + } + if (s->response_offset > s->response_buffer->len) { + error_setg(errp, "tpm-crb: Invalid response " + "offset %" PRIu32 " in migration stream", + s->response_offset); + return false; + } + if (s->response_buffer->len > s->be_buffer_size || + s->command_buffer->len > s->be_buffer_size) { + error_setg(errp, "tpm-crb: Buffer sizes exceed backend capacity"); + return false; + } + return true; +} + +static const VMStateDescription vmstate_tpm_crb_chunk =3D { + .name =3D "tpm-crb/chunk", + .version_id =3D 0, + .needed =3D tpm_crb_chunk_needed, + .post_load_errp =3D tpm_crb_chunk_post_load, + .fields =3D (const VMStateField[]) { + VMSTATE_GBYTEARRAY(command_buffer, CRBState, 0), + VMSTATE_GBYTEARRAY(response_buffer, CRBState, 0), + VMSTATE_UINT32(response_offset, CRBState), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_crb =3D { .name =3D "tpm-crb", .pre_save =3D tpm_crb_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_UINT32_ARRAY(regs, CRBState, TPM_CRB_R_MAX), VMSTATE_END_OF_LIST(), + }, + .subsections =3D (const VMStateDescription * const []) { + &vmstate_tpm_crb_chunk, + NULL, } }; =20 @@ -366,6 +420,8 @@ static const Property tpm_crb_properties[] =3D { DEFINE_PROP_TPMBE("tpmdev", CRBState, tpmbe), DEFINE_PROP_BOOL("ppi", CRBState, ppi_enabled, true), DEFINE_PROP_BOOL("cap-chunk", CRBState, cap_chunk, true), + DEFINE_PROP_BOOL("x-allow-chunk-migration", CRBState, + allow_chunk_migration, true), }; =20 static void tpm_crb_reset(void *dev) @@ -422,6 +478,7 @@ static void tpm_crb_reset(void *dev) static void tpm_crb_realize(DeviceState *dev, Error **errp) { CRBState *s =3D CRB(dev); + int ret; =20 if (!tpm_find()) { error_setg(errp, "at most one TPM device is permitted"); @@ -431,6 +488,15 @@ static void tpm_crb_realize(DeviceState *dev, Error **= errp) error_setg(errp, "'tpmdev' property is required"); return; } + if (s->cap_chunk && !s->allow_chunk_migration) { + error_setg(&s->migration_blocker, + "The tpm-crb device does not support chunk migration wi= th " + "machine version less than 11.1"); + ret =3D migrate_add_blocker_normal(&s->migration_blocker, errp); + if (ret < 0) { + return; + } + } =20 memory_region_init_io(&s->mmio, OBJECT(s), &tpm_crb_memory_ops, s, "tpm-crb-mmio", sizeof(s->regs)); @@ -463,6 +529,11 @@ static void tpm_crb_unrealize(DeviceState *dev) =20 g_clear_pointer(&s->command_buffer, g_byte_array_unref); g_clear_pointer(&s->response_buffer, g_byte_array_unref); + + if (s->migration_blocker) { + migrate_del_blocker(&s->migration_blocker); + error_free(s->migration_blocker); + } } =20 static void tpm_crb_class_init(ObjectClass *klass, const void *data) --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853935; cv=none; d=zohomail.com; s=zohoarc; b=BITWg/qVNrbZ5HCwXXZPqrQHclSfVtH+X2P9uVAf6RIzP0QXTUkzvd4DFkPqb333QRapzY1Lhc+tDRSZ3rSRf0cPk6uCXWL7bNb5q5VvirGfnWAa1EhfagT8iL3ZOR7ofaE9FOFGrqmqTRCOtlDKui5BZUbir9JZ9M2EjOI8WlU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853935; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=CaUvNm2Z8rSwWfdN5eYsP0mYlXY8nVx0VdswZh9WhF55w/Dga7VHSn54BI0mf50Gb4eNpUjeRw1TV3O5OeNIutMvaydEF/HGrWwMOwu+yQOVQ5edCVXBMp+QkAeUuMpS83NyPlfNep7PV2fFTCFw1RD4at3/Lp9JtkVHc5R2tEI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177685393569966.2591549535839; Wed, 22 Apr 2026 03:32:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUra-0006oQ-Bg; Wed, 22 Apr 2026 06:31:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrW-0006n9-Am for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:18 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrU-00070U-8C for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:17 -0400 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-495-stoXvoDwPyCAwZmxvAbJ6A-1; Wed, 22 Apr 2026 06:31:11 -0400 Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-3568090851aso12982377a91.1 for ; Wed, 22 Apr 2026 03:31:11 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.31.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:31:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=A/JJ5zXK7TqUOzZyEB+qaCxxnJaWD1pTV1TRvg8B/EF74l0ILpfPYATjECBJHC0bK2tbDS s274iYon0DWbpfd0KK915BUz1ftjAIGdwH2Yya8uMA3DDxTlRNXif1+T5GZqu1omKKKKK2 XbK7xTnBaiHPDI1KUce2KNuMTDLw1jM= X-MC-Unique: stoXvoDwPyCAwZmxvAbJ6A-1 X-Mimecast-MFC-AGG-ID: stoXvoDwPyCAwZmxvAbJ6A_1776853870 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853870; x=1777458670; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=no9rwZAxuy968ya+uuC74OrhJNui3EBsOdH6x9KOXKp1yO2svBjPXL5UWi01Ml6w/n qy3bGugo6cJA2Gf8peH2+Y7nMHaZeFTvClrkU3e4wQRkfeWfIIJ+w5kaThOnDWXfTUhT CNYNOaS/xr4D+qMyhVv4sE++fLY6ohM7YSKDm8H+YvYVpw/jaiuae2G7qWRcvS4U1cJS LLV1mJ5qY78yNQPM44N39CjfC3vKSb0EGXaJkVXPsiiyWeXNXq38MXAaIrQUpm37nJGO UURtiSUCh7V95LK7pGp4GWmq9ztZ3sr7YFcrxv0nx+7Hdr5goKl3ShRjwjG8AiSpfLBm kusQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853870; x=1777458670; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=Ghc/SicLUw1WrlzbQX+SkEatM71goWSVtq7Jc5F+4Oadpw6vyd9v58g+j1XYH81VyL 8ITfhfkmzIBrEFRPkuD5qeLjfPf0uUlhdE4TTE109k/QyKXa0FpWLEKJNAIicSSIHQyC LhSg2qbq3/Y12w+WTSjKeLXCUC9hJxJ13VJl0NBRscqNS83rSAWX37aoG3jjTY7y4RWe 5ec+DyP351GufozCWVwPXw6SwgSJINbJdiWimfVJ8aRVv2rOK0YrRVG4yranzQoALvLl MIQLSNd8CS0VYKAEEz8y1K6xLwSDPBLH5Y3vet11EsJOBOdKTJbQPcVi76aPJ9WF1pu6 gd9g== X-Gm-Message-State: AOJu0YyeaPKO+53tbd4cZEpbs8wUUfjQ/ueRse2cn+mS0JgseWJzlx8d NhkjGKA+OwbjXzK3LxXI/I8e+CtHnfKf/UgyWy5DKpeqOyc5stkTdamzD56JFt5FwJ2IOHDtAXc 5K2D1skQlfll4Qj0mCCXoFaW40hqMQLm2MZMv847UxryvWwdhSrzgzATiMtA8Z14LNDEnEBxL4P 2KTeUBpHpOpPJZPfW9ZLKUN2I8IRYjQ9wuBQAb0f8= X-Gm-Gg: AeBDieuD9r11pxlkDDpwoqjEIJGQVmj2fhsk/5PoeiXgWc0psAyWYNoQ1Mjr4OP6Prw YOQyxdmN87jnOsg2wrv+pMLEQglmyVbOJ9wqSv2pxla6gkxqVgTPZTCHPf7L65EoXSdNxIerShh fSE8zGKDj0YoHtQg46CJwT82d+wXpSNJQk0VP5SOKGyGHi+xSJzK8aMEbXnMX+w6RO1LEIXw8MA s3AtBwzYaCY7wGXnZt+3NtlwYGts/vmf2CD9uw7xQ342aNKf0O2YCciGL6seB1J4KnofRFW1AnQ QZ2g9RdN2B6AP39fBw5n59St0ixjfq9bPGtuWajSeaSp7NubtQ2vobCGblOgzFhzHzYzp/j+NEk 3qEiNUXsclaU04HEAK3wRD+WksX5ogIU3rXig7Ww1aaHJE3GqmhWXA1cSrI6tPolO6cqaAjfmgA == X-Received: by 2002:a05:6a20:72a4:b0:3a3:327:c5c9 with SMTP id adf61e73a8af0-3a30327ca1amr3092197637.26.1776853869890; Wed, 22 Apr 2026 03:31:09 -0700 (PDT) X-Received: by 2002:a05:6a20:72a4:b0:3a3:327:c5c9 with SMTP id adf61e73a8af0-3a30327ca1amr3092126637.26.1776853869327; Wed, 22 Apr 2026 03:31:09 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 07/10] qtests: Enable starting swtpm with a given profile Date: Wed, 22 Apr 2026 16:00:15 +0530 Message-ID: <20260422103018.123608-8-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853936850154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger Enable swtpm to start with a given profile by passing it to swtpm on the command line using --profile name=3D Remove any existing TPM 2 state file since applying a new profile to existing state would be refused by swtpm. Signed-off-by: Stefan Berger Signed-off-by: Arun Menon --- tests/qtest/tpm-tests.c | 6 +++--- tests/qtest/tpm-util.c | 9 ++++++++- tests/qtest/tpm-util.h | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/qtest/tpm-tests.c b/tests/qtest/tpm-tests.c index 197714f8d9..f71d882990 100644 --- a/tests/qtest/tpm-tests.c +++ b/tests/qtest/tpm-tests.c @@ -43,7 +43,7 @@ void tpm_test_swtpm_test(const char *src_tpm_path, tx_fun= c *tx, return; } =20 - succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, &error); + succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, NULL, &= error); g_assert_true(succ); =20 args =3D g_strdup_printf( @@ -91,11 +91,11 @@ void tpm_test_swtpm_migration_test(const char *src_tpm_= path, } =20 succ =3D tpm_util_swtpm_start(src_tpm_path, &src_tpm_pid, - &src_tpm_addr, &error); + &src_tpm_addr, NULL, &error); g_assert_true(succ); =20 succ =3D tpm_util_swtpm_start(dst_tpm_path, &dst_tpm_pid, - &dst_tpm_addr, &error); + &dst_tpm_addr, NULL, &error); g_assert_true(succ); =20 tpm_util_migration_start_qemu(&src_qemu, &dst_qemu, diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index 744592763f..cbba5b1c1f 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -212,7 +212,8 @@ bool tpm_util_swtpm_has_tpm2(void) } =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, - SocketAddress **addr, GError **error) + SocketAddress **addr, const char *profilenam= e, + GError **error) { char *swtpm_argv_tpmstate =3D g_strdup_printf("dir=3D%s", path); char *swtpm_argv_ctrl =3D g_strdup_printf("type=3Dunixio,path=3D%s/soc= k", @@ -222,11 +223,17 @@ gboolean tpm_util_swtpm_start(const char *path, GPid = *pid, g_strdup("--tpmstate"), swtpm_argv_tpmstate, g_strdup("--ctrl"), swtpm_argv_ctrl, g_strdup("--tpm2"), + profilename ? g_strdup("--profile") : NULL, + profilename ? g_strdup_printf("name=3D%s", profilename) : NULL, NULL }; + g_autofree char *swtpm_state_file; gboolean succ; unsigned i; =20 + swtpm_state_file =3D g_strdup_printf("%s/tpm2-00.permall", path); + g_unlink(swtpm_state_file); + *addr =3D g_new0(SocketAddress, 1); (*addr)->type =3D SOCKET_ADDRESS_TYPE_UNIX; (*addr)->u.q_unix.path =3D g_build_filename(path, "sock", NULL); diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index 681544e7d8..ca2d7d173f 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -41,7 +41,8 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx, bool tpm_util_swtpm_has_tpm2(void); =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, - SocketAddress **addr, GError **error); + SocketAddress **addr, const char *profilenam= e, + GError **error); void tpm_util_swtpm_kill(GPid pid); =20 void tpm_util_migrate(QTestState *who, const char *uri); --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853929; cv=none; d=zohomail.com; s=zohoarc; b=RQDhciDZcnTNIIlSUZelWiNlkc1wP0E36oVr0DhiHmPgxMlqnQF573iHiwar1ejmJNCU0sOszEWMUmscUFpzG3+oH/VhLDf0qt/7xcY3jk7RrEdUbaphsZwe7IWqUfaQMSFLac36eyhzCMgLUIk2usIbRtb9MbVU9r8H3CFLtLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853929; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=PZZIBNhwSpMypciThk1ZaEWTYXIYoEUFaiM7O+N9eaT+gn06PgNGEahGtypnbwJz8TldF0BFupCiGJBeWMVmZ22cpYvqGM14pi+xsHv69e4sj0zOEt6EuxWSKhtjSanGB2lV5RuWUXtFMc5/kU17h6sfUt6GZY1Vzmk6CF22t1E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853929953163.23223969543938; Wed, 22 Apr 2026 03:32:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrh-0006pD-0O; Wed, 22 Apr 2026 06:31:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUre-0006ox-Nz for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrc-000748-AO for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:26 -0400 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-553-D__6adXPM6CSdjbWf2Damw-1; Wed, 22 Apr 2026 06:31:21 -0400 Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c7ada7b25f0so45838a12.2 for ; Wed, 22 Apr 2026 03:31:20 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.31.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:31:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853883; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=It/SdsLej7xrK7ix/JtRUUStxOaTRICrI0JH1xTIlINgWCE800sEdM/AM9vnrmCLoDtpoW boM1OhEIOPIteemSHwxmy1Lx1yWUXTgZyES8G9ouw9sKJp/th/rpe2U3FHFUfFHmTVi23n BQKYsDS7YbS5yOzsa4UvuL9IXjEWQyk= X-MC-Unique: D__6adXPM6CSdjbWf2Damw-1 X-Mimecast-MFC-AGG-ID: D__6adXPM6CSdjbWf2Damw_1776853880 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853880; x=1777458680; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=fZsL8P1IgXszNEoEzBGduD1DHwW0tEejqQoLLVjWR+jnC/aU1L2TZh6gL3XE+Rim55 HckXJfZtxSgvGIRL7NBtXkLvRRlddx8qaG0nuJDXurQPxfDWONYfLoKNkK+IHXtEasfn bsTajbbvNmntK1Aw3beVyPlOknfMygogKcwTIITMhA1nlvohwVxhKiNZtekyzpLud9NO OaSWZ4FWpkr46R7Mgyid6sU70ouw28GYnSbtKUKobL9HctouyIwh4R5ZLIiuf85NDOVn PUNiJtUMs51D4uo4vw90/J7HhxWaDbKOlfOsmHsyb+8OaejqQ9Gg6x/o9saNB9ZYHpci a8Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853880; x=1777458680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=Ivv4uMvb0WQJaq1jaqJGjAKeDVLSN4yPN/PaZraL39avLN9iMqdqfldhRHw+x9z3ss V13CcIaqPpE3HZDo62FMqavKBmTOzTqULpQe6mJ3SFAppPfS5R3MRZB9oO3Y81MrrmF/ 9HQqG/0mczbJRJU+Ksidqi1YxDyyCnI7gtKB6ZV4NgwqaPA+9Vrdz4ppJ2mitH4+v5uO 06vnx4XNTbk9ZarVg0AL8prSYRdbavaZ/FWxWw+6jBEuR5hfkYDlAaxcKJjsuwpw7aQZ iOWpyqEVmth6BmFdRCc7ive9vGaUu9E/8FXRdc6IgsWjNbnZf9QFV7SttO01FD5O1S7Y KlZg== X-Gm-Message-State: AOJu0YxO+6DZ/V73Eit/rR9bUrIs5jYMOInLrK9M7YZ8Ka5PVtJUHYT9 d1TddTgHeWYyADz1ut5giPjqR6KBEGCd6Sphh2N22+BlzFIgjjHUs+WakqY7eazoJ9ida04/mnB 1ZG8+kAa7fEA4z7oe3mBQZKgbGPKBmdKQ96UpY8z2jQ5Q+4dNOHwPW6Q7z+J/P82wZa9Zq9RrV/ OAazvCSWpgoZ9F2BAt1tek5mIj+DuWiR6dFqzzRiM= X-Gm-Gg: AeBDieswH2HGxDeEE2ryMOpuUO3nR00nCC0CNTJKyu1fUuzTS41GN5gbF4RpUCoxq/O Nyq8idvHE0u6Pi/7Fnodh3SjB1xlUTnQCrmK8Uww4j8zYqOoYdPIEHUc6T+TnV1YoKP5kUfokiJ rAJKWh4jDOlCxfyXykKWvW2K/IbuVoXmMzEI0zynumw7rRn4oSebGGjXgXZjwS/SG3J1tcSTn7p Fm5Q2SlO5OvQfM7e164iYirdeqDtalkwBPV97JgaEZKqEzABLjZWwbzgkyEu6T1JvNEHtG4eQ7W UhfXSiYCxqCJwn5L+rejtizFoFf+dJB1MmY2wODMm9/pydh8JaqbqzzSH1oBEbUFQrCX/bqrCL3 iq85+F2ZeXdGyrTuw/zYTei27UUkrikJcDAFuYsBwdb2sPWR9qhm7FpXsdw4XpKWbvwuz7c/5Ng == X-Received: by 2002:a05:6a20:a12b:b0:3a2:d79c:4161 with SMTP id adf61e73a8af0-3a2d79c44a2mr13037933637.47.1776853874782; Wed, 22 Apr 2026 03:31:14 -0700 (PDT) X-Received: by 2002:a05:6a20:a12b:b0:3a2:d79c:4161 with SMTP id adf61e73a8af0-3a2d79c44a2mr13037881637.47.1776853874086; Wed, 22 Apr 2026 03:31:14 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 08/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with CRB Date: Wed, 22 Apr 2026 16:00:16 +0530 Message-ID: <20260422103018.123608-9-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853931094154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger To test large data transfers (receiving and sending) that make use of a CRB chunked transfer, create an ML-DSA-87 key and sign some data with it and receive the 4627 bytes signature. After this send the signature back to the TPM to have the TPM verify the signature. Signed-off-by: Stefan Berger Signed-off-by: Arun Menon --- tests/qtest/tpm-crb-swtpm-test.c | 5 +- tests/qtest/tpm-tests.c | 96 ++++++++++++++++++++++++++++++++ tests/qtest/tpm-tests.h | 4 ++ tests/qtest/tpm-util.c | 37 ++++++++++++ tests/qtest/tpm-util.h | 2 + 5 files changed, 142 insertions(+), 2 deletions(-) diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-t= est.c index 050c7b0c1f..541fd58133 100644 --- a/tests/qtest/tpm-crb-swtpm-test.c +++ b/tests/qtest/tpm-crb-swtpm-test.c @@ -37,8 +37,9 @@ static void tpm_crb_chunk_swtpm_test(const void *data) { const TestState *ts =3D data; =20 - tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer, - "tpm-crb", NULL); + tpm_test_swtpm_large_tx_test(ts->src_tpm_path, + tpm_util_crb_chunk_transfer, + "tpm-crb", NULL); } =20 static void tpm_crb_swtpm_migration_test(const void *data) diff --git a/tests/qtest/tpm-tests.c b/tests/qtest/tpm-tests.c index f71d882990..21811f3a2e 100644 --- a/tests/qtest/tpm-tests.c +++ b/tests/qtest/tpm-tests.c @@ -13,6 +13,7 @@ */ =20 #include "qemu/osdep.h" +#include "system/tpm_util.h" #include =20 #include "libqtest-single.h" @@ -130,3 +131,98 @@ void tpm_test_swtpm_migration_test(const char *src_tpm= _path, g_unlink(src_tpm_addr->u.q_unix.path); qapi_free_SocketAddress(src_tpm_addr); } + +void tpm_test_swtpm_large_tx_test(const char *src_tpm_path, tx_func *tx, + const char *ifmodel, + const char *machine_options) +{ + unsigned char signature[2 + 2 + 4627]; /* TPMT_SIGNATURE */ + unsigned char response[8192]; + unsigned char request[8192]; + SocketAddress *addr =3D NULL; + GError *error =3D NULL; + char *args =3D NULL; + GPid swtpm_pid; + QTestState *s; + gboolean succ; + + if (tpm_test_swtpm_skip()) { + return; + } + + /* Large transfers based on ML-DSA operations required default-v2 prof= ile */ + if (!tpm_util_swtpm_has_profile("default-v2", "ml-dsa")) { + return; + } + + succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, "defaul= t-v2", + &error); + g_assert_true(succ); + + args =3D g_strdup_printf( + "%s " + "-chardev socket,id=3Dchr,path=3D%s " + "-tpmdev emulator,id=3Ddev,chardev=3Dchr " + "-device %s,tpmdev=3Ddev", + machine_options ? : "", addr->u.q_unix.path, ifmodel); + + s =3D qtest_start(args); + g_free(args); + + tpm_util_startup(s, tx); + + static const unsigned char tpm_createprimary_mldsa[] =3D + "\x80\x02\x00\x00\x00\x38\x00\x00\x01\x31\x40\x00\x00\x07\x00\x00" + "\x00\x09\x40\x00\x00\x09\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00" + "\x00\x00\x0f\x00\xa1\x00\x0b\x00\x04\x04\x72\x00\x00\x00\x03\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00"; + tx(s, tpm_createprimary_mldsa, sizeof(tpm_createprimary_mldsa), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 2831); + + static const unsigned char tpm_signsequencestart[] =3D + "\x80\x01\x00\x00\x00\x12\x00\x00\x01\xaa\x80\x00\x00\x00\x00\x00" + "\x00\x00"; + tx(s, tpm_signsequencestart, sizeof(tpm_signsequencestart), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 14); + + /* Complete sequence and get signature */ + static const unsigned char tpm_signsequencecomplete[] =3D + "\x80\x02\x00\x00\x00\x2a\x00\x00\x01\xa4\x80\x00\x00\x01\x80\x00" + "\x00\x00\x00\x00\x00\x12\x40\x00\x00\x09\x00\x00\x00\x00\x00\x40" + "\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00"; + tx(s, tpm_signsequencecomplete, sizeof(tpm_signsequencecomplete), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 4655); + + /* TPMT_SIGNATURE found at offset 14 */ + memcpy(signature, &response[14], sizeof(signature)); + + static const unsigned char tpm_verifysequencestart[] =3D + "\x80\x01\x00\x00\x00\x14\x00\x00\x01\xa9\x80\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00"; + tx(s, tpm_verifysequencestart, sizeof(tpm_verifysequencestart), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 14); + + /* TPM2_VerifySequenceComplete */ + memcpy(request, + "\x80\x02\x00\x00\x12\x36\x00\x00\x01\xa3\x80\x00\x00\x01\x80\x= 00" + "\x00\x00\x00\x00\x00\x09\x40\x00\x00\x09\x00\x00\x00\x00\x00", + 31); + memcpy(&request[31], signature, sizeof(signature)); + tx(s, request, 31 + sizeof(signature), response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 27); + + qtest_end(); + tpm_util_swtpm_kill(swtpm_pid); + + g_unlink(addr->u.q_unix.path); + qapi_free_SocketAddress(addr); +} diff --git a/tests/qtest/tpm-tests.h b/tests/qtest/tpm-tests.h index 07ba60d26e..6993ce40dc 100644 --- a/tests/qtest/tpm-tests.h +++ b/tests/qtest/tpm-tests.h @@ -24,4 +24,8 @@ void tpm_test_swtpm_migration_test(const char *src_tpm_pa= th, const char *ifmodel, const char *machine_options); =20 +void tpm_test_swtpm_large_tx_test(const char *src_tpm_path, tx_func *tx, + const char *ifmodel, + const char *machine_options); + #endif /* TESTS_TPM_TESTS_H */ diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index cbba5b1c1f..ad4325aade 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -211,6 +211,43 @@ bool tpm_util_swtpm_has_tpm2(void) return has_tpm2; } =20 +bool tpm_util_swtpm_has_profile(const char *profilename, + const char *content) +{ + bool has_profile =3D false; + char *out =3D NULL; + static const char *argv[] =3D { + "swtpm", "socket", "--tpm2", "--print-profiles", NULL + }; + + if (!tpm_util_swtpm_has_tpm2()) { + return false; + } + + if (!g_spawn_sync(NULL /* working_dir */, + (char **)argv, + NULL /* envp */, + G_SPAWN_SEARCH_PATH, + NULL /* child_setup */, + NULL /* user_data */, + &out, + NULL /* err */, + NULL /* exit_status */, + NULL)) { + return false; + } + + if (strstr(out, profilename)) { + has_profile =3D true; + } + if (has_profile && content && strstr(out, content) =3D=3D NULL) { + has_profile =3D false; + } + + g_free(out); + return has_profile; +} + gboolean tpm_util_swtpm_start(const char *path, GPid *pid, SocketAddress **addr, const char *profilenam= e, GError **error) diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index ca2d7d173f..90790f30db 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -39,6 +39,8 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx, const unsigned char *exp_resp, size_t exp_resp_size); =20 bool tpm_util_swtpm_has_tpm2(void); +bool tpm_util_swtpm_has_profile(const char *profilename, + const char *content); =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, SocketAddress **addr, const char *profilenam= e, --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853912; cv=none; d=zohomail.com; s=zohoarc; b=PNKQU8PZJzz8oxZj0bFIDhFxI1lE3A1LYzUbTLWaWXoXi/jzziZQX8U8hHpe+mLuLCCw6CaZi8s+dEfh9p5uBILjeZJoGCoEmhmFoYVWD9egaI3pjcDHKsVvqqX/LqB6A9fuZ0MYQEkC+RJ8pXKzlcoBW4rkSzNqtyETWQRobDU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853912; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=X5BfOb29CchgA3O8cD3d/CWCo4Ox5ZAg0ea68Q66Ig0=; b=LQm2on4vYo509uMHqK0d8GioDNTaANH12bcfb9xx8aOyc3JJByI5O396fm6oEqHIQqqTrUjtOJIOb3o7R87eQRBCMIBRoXU0MRi1bJ+lohNYAgs9mVr0SLlCJ2UCzLhfAt1vY4kANX5SaAUz8i1cKrF0Z9v9DPPU3ZNpbvE4BJk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853912987526.6018698473207; Wed, 22 Apr 2026 03:31:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrh-0006pE-Kc; Wed, 22 Apr 2026 06:31:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrf-0006p5-Hk for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrd-00075B-Iw for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:27 -0400 Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-622-VV1FOndaP9-aScaOa-_now-1; Wed, 22 Apr 2026 06:31:23 -0400 Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-3595485abbbso6522444a91.2 for ; Wed, 22 Apr 2026 03:31:23 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.31.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:31:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=X5BfOb29CchgA3O8cD3d/CWCo4Ox5ZAg0ea68Q66Ig0=; b=b99NzYGUjtX7Zs2+OzhzdceGI3P3nICodgUf2vfhIW9dycgXGfvFeRchxXZz9+5NCcoBaC pL9ml+zy4JvHK3gJLwQTT6W8Tao4KSdDOOSmhQ4Jie+gEYZcXk0d1nqdC4qYaqk3MH+vBg 2hd8gSq1Zwfrrf+pGikzh/FYV6nn9kI= X-MC-Unique: VV1FOndaP9-aScaOa-_now-1 X-Mimecast-MFC-AGG-ID: VV1FOndaP9-aScaOa-_now_1776853883 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853883; x=1777458683; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=X5BfOb29CchgA3O8cD3d/CWCo4Ox5ZAg0ea68Q66Ig0=; b=DNLN0uCWNn9mpyBDAvu9NKe9nPTmvRgIgwVfX8jkgUMHp5A53JqnvvZTaMJwTSTupu y+JWQaCsHGje3ceRPZrF8z0JtmExpgtqCeQrOeIIHbNPkuO1FbbOnwHcDyiXlpXCs9Gi CkYu+ttkfE9BaT0aSxpGZK4f2IslVfIz0Y95hnTZ7i75dUMgwhxBshvk8DnXJlmFn2jd VR4r4yCWXm0c/D5gf5twcQkNUoVx/ENRAEbw+3P3mr6h5ZmQlp3Yeuo6hqysP02niNXb KgqUxnAWqoNFnCS+uyyUYopH0UOnEuFI8dVhLe3LfKwKaBumJfIQXoZlTFtaNezVDLJN 7xwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853883; x=1777458683; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=X5BfOb29CchgA3O8cD3d/CWCo4Ox5ZAg0ea68Q66Ig0=; b=sHw4Vxb3y+aA8SY1Ob49R1MdFdepjDuZeAhUxeaVrYf65NYysGzQH4lQoHjrDxgbQi FPYYwg2PWXfPkY/hfNR4UrGGdFKcUaDoHO4FczRvL7MYlmmuCY7/yskYfSPrJBbME/yT zHHcJUqvMPNA8SVk9JG9rU93HR1AR7h9z/n/vGi3QjFvbyWnl/JtTq5vTUCAflmRwZXo 1HuDDcplUa1e8rQo89M+oIgkQTHzbHoCNsRpBDl0ttme+wgOlHOHvM1MgNV8fFaOmk+K 2m1p4cywDGP/hgehImU9FIQCs4jNSRzlWWWrnSlzy4oyVWLyjDG8XX5FWTTbcf+ig43Z Jh1w== X-Gm-Message-State: AOJu0YyLs7mime7Xp3qVz9RZ4KLe7AsLRi8nYIlNvtnUWOz+LRxGS1Bw 6baW0M/pjUaTDOz6ynpiKooDGU/Anb3VOFf7iDRZpD5+ZM7XkX+sSDuKcu4eEgE85u5qyiyImP0 0sQGWHyR2/1IgGo5iT4A2o4/EgiYK3TGnusUNUYPv0vZzUhOtSRkQd82V+Osn+HxDmjhF6xkl5Z +WKPZQcw+jKyRKg3TwPAcw4+ZFM9O4niz55NMTMDA= X-Gm-Gg: AeBDieureMckw4OTNEh3eC4mKTIQ4tMkw894qDZWj7eE1PwmFqhd+Prh0NjvKVaOtyF g029NwVCqH4/0CfnSpDvWr470KNJslFA+DekpK4LCxI+5frf8DyAk1WFcqfpb/6WygkMxSzmq9W 5eB1KgIKlSvN6RRLBVdfH+Wq6/PgIDr10BH1vVLzHaA81Vtt0rz+wQj/iAiqggrlynXNUKMoQaa wJKFgGwjKqpJjbwB8sBfoO1q8FoMp36F7MS1IHtURkxIIhRO3CtVNSczNAp9PmLOE+gId5McUEz 8Fq/dphRYKyEOMwO9+g2qa+FQkkmOEyPPeFiWfSJeRBtbVo8hZ9O1xtCNHsOmFr9g8yewDw3NJD cdDtwlzW8ZmJ4vkzOvYddFU8+Xqx7PXumtEvPqDxWGUX6X0sf/rtDBnkHJodLrEZkjb8U4zGT9w == X-Received: by 2002:a05:6a20:e211:b0:3a2:7ef4:81df with SMTP id adf61e73a8af0-3a27ef485b0mr14887062637.26.1776853882370; Wed, 22 Apr 2026 03:31:22 -0700 (PDT) X-Received: by 2002:a05:6a20:e211:b0:3a2:7ef4:81df with SMTP id adf61e73a8af0-3a27ef485b0mr14886993637.26.1776853881738; Wed, 22 Apr 2026 03:31:21 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 09/10] tpm: Extend TPM TIS buffer size to 8192 bytes Date: Wed, 22 Apr 2026 16:00:17 +0530 Message-ID: <20260422103018.123608-10-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853914534154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger Extend the TIS buffer size to 8192 bytes and store the first 4096 bytes using VMSTATE_PARTIAL_BUFFER and the rest using VMSTATE_BUFFER_START_MIDDLE when necessary. It is necessary to store the buffer beyond original 4096 bytes when: - the user has written more than 4096 bytes to the buffer - the TPM 2 response is larger than 4096 bytes Use the .needed function of the VMStateDescription interface to check whether the bytes in the buffer beyond 4096 bytes needed to be saved. The .pre_save function is called before the .needed function so that we can be sure to have received any response packet from the TPM. Signed-off-by: Stefan Berger [ Arun Menon - Removed WIP tag and TODO for submission ] Signed-off-by: Arun Menon --- hw/tpm/tpm_tis.h | 2 ++ hw/tpm/tpm_tis_common.c | 23 +++++++++++++++++++++++ hw/tpm/tpm_tis_i2c.c | 24 +++++++++++++++++++++++- hw/tpm/tpm_tis_isa.c | 24 +++++++++++++++++++++++- hw/tpm/tpm_tis_sysbus.c | 24 +++++++++++++++++++++++- 5 files changed, 94 insertions(+), 3 deletions(-) diff --git a/hw/tpm/tpm_tis.h b/hw/tpm/tpm_tis.h index 184632ff66..d35c332287 100644 --- a/hw/tpm/tpm_tis.h +++ b/hw/tpm/tpm_tis.h @@ -90,4 +90,6 @@ uint32_t tpm_tis_read_data(TPMState *s, hwaddr addr, unsi= gned size); void tpm_tis_write_data(TPMState *s, hwaddr addr, uint64_t val, uint32_t s= ize); uint16_t tpm_tis_get_checksum(TPMState *s); =20 +bool tpm_tis_ext_buffer_migration_needed(struct TPMState *s); + #endif /* TPM_TPM_TIS_H */ diff --git a/hw/tpm/tpm_tis_common.c b/hw/tpm/tpm_tis_common.c index f594b15b8a..dffb0a411e 100644 --- a/hw/tpm/tpm_tis_common.c +++ b/hw/tpm/tpm_tis_common.c @@ -890,3 +890,26 @@ const VMStateDescription vmstate_locty =3D { } }; =20 +bool tpm_tis_ext_buffer_migration_needed(struct TPMState *s) +{ + if (!TPM_TIS_IS_VALID_LOCTY(s->active_locty)) { + return false; + } + + switch (s->loc[s->active_locty].state) { + case TPM_TIS_STATE_IDLE: + case TPM_TIS_STATE_READY: + return false; + case TPM_TIS_STATE_RECEPTION: + return s->rw_offset >=3D 4096; + case TPM_TIS_STATE_EXECUTION: + /* + * TPM is executing: we cannot know the size of TPM response. + * .pre_save must have been called before (should never get here). + */ + return false; + case TPM_TIS_STATE_COMPLETION: + return (tpm_cmd_get_size(&s->buffer) >=3D 4096); + } + return false; +} diff --git a/hw/tpm/tpm_tis_i2c.c b/hw/tpm/tpm_tis_i2c.c index 9f13e0ec12..a01df7e5a0 100644 --- a/hw/tpm/tpm_tis_i2c.c +++ b/hw/tpm/tpm_tis_i2c.c @@ -110,13 +110,31 @@ static int tpm_tis_i2c_post_load(void *opaque, int ve= rsion_id) return 0; } =20 +static bool tpm_tis_ext_buffer_migration_needed_i2c(void *opaque) +{ + TPMStateI2C *i2cst =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&i2cst->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_i2c =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_i2c, + .pre_save =3D tpm_tis_i2c_pre_save, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateI2C, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_i2c =3D { .name =3D "tpm-tis-i2c", .version_id =3D 0, .pre_save =3D tpm_tis_i2c_pre_save, .post_load =3D tpm_tis_i2c_post_load, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateI2C), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateI2C, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateI2C), VMSTATE_UINT8(state.active_locty, TPMStateI2C), VMSTATE_UINT8(state.aborting_locty, TPMStateI2C), @@ -133,6 +151,10 @@ static const VMStateDescription vmstate_tpm_tis_i2c = =3D { VMSTATE_UINT8(csum_enable, TPMStateI2C), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_i2c, + NULL, } }; =20 diff --git a/hw/tpm/tpm_tis_isa.c b/hw/tpm/tpm_tis_isa.c index 61e95434f5..73038f1a10 100644 --- a/hw/tpm/tpm_tis_isa.c +++ b/hw/tpm/tpm_tis_isa.c @@ -49,12 +49,30 @@ static int tpm_tis_pre_save_isa(void *opaque) return tpm_tis_pre_save(&isadev->state); } =20 +static bool tpm_tis_ext_buffer_migration_needed_isa(void *opaque) +{ + TPMStateISA *isadev =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&isadev->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_isa =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_isa, + .pre_save =3D tpm_tis_pre_save_isa, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateISA, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_isa =3D { .name =3D "tpm-tis", .version_id =3D 0, .pre_save =3D tpm_tis_pre_save_isa, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateISA), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateISA, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateISA), VMSTATE_UINT8(state.active_locty, TPMStateISA), VMSTATE_UINT8(state.aborting_locty, TPMStateISA), @@ -64,6 +82,10 @@ static const VMStateDescription vmstate_tpm_tis_isa =3D { vmstate_locty, TPMLocality), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_isa, + NULL, } }; =20 diff --git a/hw/tpm/tpm_tis_sysbus.c b/hw/tpm/tpm_tis_sysbus.c index e9372e7316..86fc5a592c 100644 --- a/hw/tpm/tpm_tis_sysbus.c +++ b/hw/tpm/tpm_tis_sysbus.c @@ -48,12 +48,30 @@ static int tpm_tis_pre_save_sysbus(void *opaque) return tpm_tis_pre_save(&sbdev->state); } =20 +static bool tpm_tis_ext_buffer_migration_needed_sysbus(void *opaque) +{ + TPMStateSysBus *sbdev =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&sbdev->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_sysbus =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_sysbus, + .pre_save =3D tpm_tis_pre_save_sysbus, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateSysBus, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_sysbus =3D { .name =3D "tpm-tis", .version_id =3D 0, .pre_save =3D tpm_tis_pre_save_sysbus, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateSysBus), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateSysBus, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateSysBus), VMSTATE_UINT8(state.active_locty, TPMStateSysBus), VMSTATE_UINT8(state.aborting_locty, TPMStateSysBus), @@ -63,6 +81,10 @@ static const VMStateDescription vmstate_tpm_tis_sysbus = =3D { 0, vmstate_locty, TPMLocality), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_sysbus, + NULL, } }; =20 --=20 2.53.0 From nobody Thu Apr 30 01:48:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1776853943; cv=none; d=zohomail.com; s=zohoarc; b=X8POJX4/dRlbXkvn+cMXYR/ZchDfqqBSXG7xOmQ1f7yuAPMq1GkUwIqUfWn6WLdtzWkIEwUj4WdyRGMZ5yF1M5VmJr5hqVhgOcwHjhxUWg1eUidPJDrHNzU3NXFBK3ZIyG45ce9JgiSyKXBG2QEc+ulDb3JKhCROVf2PDwhmmEQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776853943; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ANIkrkW9qLCUsv+omUO8K8xqyF/8AkJPe/ZW6RWrjNo=; b=TocnFljuNLD9KhC2h/AlGwNvl6+OFYiIv6Qe7ARjCbdhox5XLW+kqxRfuiptGfCit3YPSj0C5fgL8vj3tzdAsLQUft9/kOK6aIbwWmLhj4FlKx5x4+WAmrrV1uoKkEEtLR+U+y4fbsMkjvEUn+F/AbTZBvLjAqElZejU8VNWisA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776853943774901.2837368004461; Wed, 22 Apr 2026 03:32:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFUrq-0006xQ-3w; Wed, 22 Apr 2026 06:31:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrl-0006uz-E7 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:33 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFUrj-0007B8-DW for qemu-devel@nongnu.org; Wed, 22 Apr 2026 06:31:33 -0400 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-462-xo2EI-hIPTuvxmIOjWeRrQ-1; Wed, 22 Apr 2026 06:31:29 -0400 Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-358f058973fso6470328a91.1 for ; Wed, 22 Apr 2026 03:31:29 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f920e1sm12589666a12.2.2026.04.22.03.31.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 03:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776853890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ANIkrkW9qLCUsv+omUO8K8xqyF/8AkJPe/ZW6RWrjNo=; b=VhLdJGo5hzWqWWDIzIgx+BbtmP9YYP24v/1NyXz0ethWTyKdrqA5kiwWb1Njxt3+bjsc8V bgkBO3OuGZInaqfmVkdISzWxir+vM1y2Yl7Oe3MJ+vBbdRfJS4Q+yurVxPAcd4Sod71O2R drLQxf/5MTr8NXs5MqVbK19MPokbmHw= X-MC-Unique: xo2EI-hIPTuvxmIOjWeRrQ-1 X-Mimecast-MFC-AGG-ID: xo2EI-hIPTuvxmIOjWeRrQ_1776853888 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776853888; x=1777458688; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ANIkrkW9qLCUsv+omUO8K8xqyF/8AkJPe/ZW6RWrjNo=; b=Rd6lJlbzDtg6nV1SI6yxLEte+nI9sgd/Y9UTVT5A2hQB06YGis4bHr439BnvyyBFYO wALTNB/vyvc8QMpuM1MXNKgWTkbT+9uHr0+j2KXT6U+llYdS1SVV8vAYALGXCxk/1LFl nR0JMuuFSPosTGJAvgTOcjHU155GN1F7mAY5an+aNU46ft9aTPuJMOCwuaMPAlbD8G6E IC2IIuQLawJ8rUjHAo9Lx0EvTBNnEpzAOq47O+mXOdPsJm0t9Z4ZnhhmkT5hLGnXcBwZ PLkbhFs8/emO9B6CFfYY77pvwkbkVjwbXjYaQPepqcSsWR1DHbM7iDOQFJEaJ0wnDjGQ MX6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776853888; x=1777458688; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ANIkrkW9qLCUsv+omUO8K8xqyF/8AkJPe/ZW6RWrjNo=; b=oB5JClw16lQKg8zj/BsNC0WyBYfm4Ck33dlxCIRpuh/DiOxOwbrVG5/kmxftptJ5FK BGN+CNZYRYQNfP6yh2jmLKGXR2YBKYoxPF90ccO3io6z6R0AM4UPMauQJtR0L9q4rVev 3aLbR8JyFWmZ/W84Q4zzu1zYWS6RUqSrG3gJ2DiGx+zGuFfzOqFYC0C7eqrhD5a5RxjQ bel997PwCd+TNnOtIr6FxwSs8duM+kxvUxakMzK1JIPR7G482cNeU+gTK5OXFaqscmlp BXg0w/UMxxXNuR+T5gSvRMuUm+NmJAwZkk5F1wjeRyGljoBIFCdGzMYCcSux8UkmmEEF ljLg== X-Gm-Message-State: AOJu0Yzji4igOnYUHBmVgX4mbJ747FMGNKcQuAJPSzCtW75A6rqD8CA/ AzIUIJa3sLGD4RK385W23JiTmv+d3gu88pNJvS4vyghjUzgdnpeAyB8Z3jeRwJ7OeospNqAUD8y Bsq3SRPo+u305rWtiNNRiqRScMGXr+yIlMa1e7rNfx9a6NtrlxVkf8g500JaAvNyN32FdgCs6TA DyJTidRsVAYcrYaM80mhnl+jTfFv4NOewO22Cj+hw= X-Gm-Gg: AeBDietTW1CoECzneyK0Bnk+kD/WPSfw6GSBBwj/gT92TxV1/VUkIYVgWtcvDfXRbt1 Z4Ic7eG0TPUySzm3nKxE27wSR4vrlyKVRDWROdUTV0BjnIRwip89+pQczHJW1ZZtnWUSFb8tb6c Nr3eLNEu/m+kQ9VaSk18sNHEFEWC8tkOa8bbAMAofnoOeIcZ7XgPrZyW/E2w8QJftN4ZUcddmFA feLEF4Ip0mUT+7c76rGWCDtdl9ZqD7gzSKaYBSXS5ofik6VgVdrrssfoWTQ5LhuUw+EZORsAFqa /GPPsssuO/tE27xSw2Yg1VWlqUzlJxKHcvRERrJPpwo+GgA4DQXK9b/V6vTB5jpgmCBr8lxaXXC P2jIY6Usl5MMf7mfRg8O4XjNNFIXPTftaL3QxClQZuw9NAgKKyN1DO7G9bSHcqGef3FNob/mLqQ == X-Received: by 2002:a17:90a:e704:b0:35b:9896:cbcd with SMTP id 98e67ed59e1d1-361404b9b70mr20767884a91.27.1776853888160; Wed, 22 Apr 2026 03:31:28 -0700 (PDT) X-Received: by 2002:a17:90a:e704:b0:35b:9896:cbcd with SMTP id 98e67ed59e1d1-361404b9b70mr20767828a91.27.1776853887513; Wed, 22 Apr 2026 03:31:27 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Zhao Liu , Stefan Berger , Marcel Apfelbaum , Laurent Vivier , Paolo Bonzini , Fabiano Rosas , Igor Mammedov , marcandre.lureau@redhat.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Michael S. Tsirkin" , Yanan Wang , Ani Sinha , Arun Menon , Stefan Berger Subject: [PATCH v5 10/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with TIS Date: Wed, 22 Apr 2026 16:00:18 +0530 Message-ID: <20260422103018.123608-11-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260422103018.123608-1-armenon@redhat.com> References: <20260422103018.123608-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1776853945095154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger Test a large data transfer with the TIS. To do this, first create an ML-DSA-87 key and sign some data with it. Then receive the 4627 bytes signature and then send the signature back to have the TPM verify it. Signed-off-by: Stefan Berger Signed-off-by: Arun Menon --- tests/qtest/tpm-tis-swtpm-test.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/qtest/tpm-tis-swtpm-test.c b/tests/qtest/tpm-tis-swtpm-t= est.c index 105e42e21d..56d2a340c9 100644 --- a/tests/qtest/tpm-tis-swtpm-test.c +++ b/tests/qtest/tpm-tis-swtpm-test.c @@ -36,6 +36,15 @@ static void tpm_tis_swtpm_test(const void *data) "tpm-tis", NULL); } =20 +static void tpm_tis_large_tx_swtpm_test(const void *data) +{ + const TestState *ts =3D data; + + tpm_test_swtpm_large_tx_test(ts->src_tpm_path, + tpm_tis_transfer, + "tpm-tis", NULL); +} + static void tpm_tis_swtpm_migration_test(const void *data) { const TestState *ts =3D data; @@ -57,6 +66,8 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 qtest_add_data_func("/tpm/tis-swtpm/test", &ts, tpm_tis_swtpm_test); + qtest_add_data_func("/tpm/tis-larget-tx-swtpm/test", &ts, + tpm_tis_large_tx_swtpm_test); qtest_add_data_func("/tpm/tis-swtpm-migration/test", &ts, tpm_tis_swtpm_migration_test); ret =3D g_test_run(); --=20 2.53.0