From nobody Tue Apr 7 18:36:01 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=1775485184; cv=none; d=zohomail.com; s=zohoarc; b=iWjc/pdqs6BpQcZctIb0Xt1LWehGRO+E07CACrKC/uu+f99a0Ye9EAmSBxHvq7BZzmRgc2CDH1zE46gjXmk1qBacQ6xzUejQJpgSdFxdfEc45Ma38AGQrH642eYWf/5rbSODDy+uekzb0r0+lN8IZMoEXba69lVnEa1h4Dc8ybk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485184; 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=PDFMxGizdhMe8FGMdKmLAoCznPJVA10mqEjckCECz7U=; b=UfMNU85DXuMKsqriD6iAhaK9hEzNmTmGjXPNthhvzOV58r7dnnzxcxUcoey06cwNe8PewP1AQwJCSmVDQn7ENF6/8imyRewXpQIVzLIOYilJRj9MokWJPnVT+uXkdmH3kUdT3ClW8w3JUX5saXcUm8p2vc0CdYc/TxwiBf3opjE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485184718753.9603667387659; Mon, 6 Apr 2026 07:19:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmA-0003sW-49; Mon, 06 Apr 2026 10:18:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9km8-0003sO-62 for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:00 -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 1w9km6-0004zT-FC for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:17:59 -0400 Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-547-zL_jj9DhPAqJOR-Kd4gB0A-1; Mon, 06 Apr 2026 10:17:56 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b23c909256so58690225ad.0 for ; Mon, 06 Apr 2026 07:17:56 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:17:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485077; 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=PDFMxGizdhMe8FGMdKmLAoCznPJVA10mqEjckCECz7U=; b=V4lunZZI2yvgvlsynubInufxF6tM3i1NtBj/g+MPax+MSHXL9gg/ZShK3kl5jp4D+51YI9 sFAf3QKaVqEe9/Vd+YkFmIFoLSxAKq+cerZd05ETMnR0+u9rZj39m9qo7BSwCEvwGo79wg agiyu7u+plL3pmkdTQShfAf0MLhgAz4= X-MC-Unique: zL_jj9DhPAqJOR-Kd4gB0A-1 X-Mimecast-MFC-AGG-ID: zL_jj9DhPAqJOR-Kd4gB0A_1775485075 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485075; x=1776089875; 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=PDFMxGizdhMe8FGMdKmLAoCznPJVA10mqEjckCECz7U=; b=Zb0FTiLz6bTLDWcTSmnisEoy6My7g8EA1bfD3OQr0E0sIofnyrv6gaGIs6ykUW2KTP Et6OuuSUmVO/2Yh1rgcB5BBa9M/kSBb48C3LqsjlyYEBMUdjmjNLNHrrOIbSLhfF55lw EtfKqKJnn1+WfUzfVs3K70ijiJ6kHZ2KE9NcPGGPjOE2Mf5RoOioajKbM2LESR95Z5rD 7M5hpM1jWshLFT6/UIbIBQX1T0GsI3rV8GL3k2MjvySMPT/E2bmw2XCW6l+oGalWGVvO P+Oo1cieu+YPKWWhlhlX7HBBnw/yMOuLz13Mbiwt6lN0KG/VBm8Nd3Bed9g1W2Fd8GOg wrtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485075; x=1776089875; 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=PDFMxGizdhMe8FGMdKmLAoCznPJVA10mqEjckCECz7U=; b=s54jBxkCdMiXoudg1kfAHHTuAiwvk0CYIwsS4KqZHXNr5HU7jhBsOoXTmWyMADTaes w7+hi5nWvCfsVz8l2dXFa5q6wex26J2PNlClMco8lJMaZpSkS9scZm1lljxHmndISY5K 5N2rei6lEjM07GG0+qL1xryLtupa2Wjatgg5/gI8gqpEw6qhmKHAlZpvGp8hgQnbHHVO elF5+Wkf1XnhmEXmd7KU5fJ3Ee90h/9DZfWllu1PJG9PTHfsxV5Tgp3RqN1eUZt3vdqW YL9XLKs0nMntA7zT0vDxxC1felxXT//88BOpOIKtNsVl3I8x0PUR8o39gvr3XKNpMQKW VPgQ== X-Gm-Message-State: AOJu0YxCB7oWUIbkfIkKYVsn//t/+xuW1Tt/0zeyvwnr78rh0gODTOgo tIdljrNvV0+ck3tHfRoXaJuWHCfIFMbVtNYRYLF1N+k3rIgVE5rWHytoIfos66cmbTb4v82utJx MALB9I6PkaEe4K25A+2SwRAUo3K+IpTWLFv9fNuPeQ+i33xQkgpIGX3xLnA3e/hYZCMgHaI7pnp bod4tbq7MxrQ6h6l+/o/zmB5hj5MXqZBvG/Rd/usk= X-Gm-Gg: AeBDiet08kY5XW7wjo4aJaz5XIrs9s67W+LuvUwZJzpQfDexEmF176CKoseUTXvxlYQ fwryxLC5Bc8iew/75bljEVdbhNqpRmL226tbVQK5gPtROgdsGFP/4+AKtDwoUyjJKEsWunFYDPx bXEwUi/pa0cwV+j7FH4g4QXPBnesF8q7NLGIWp98LnN889h4TWTiQCoBmp/y3t96EcfIlFG89vZ pXLlwzj+eaBw0jEVnUyjb4Q8N5fBVJh1Gb4WFqFL2F64s2NcUEsBb13OvyCDJaO4rK/x1MK8km6 ERfSq1WinKcOsYY5ergQ+Uybn4OyRnRpvrH+ZvQ3dIbNuc0+cgLbQD+M8u1CctLVLrMeB1I8FUl 2wmjob3VcOZmQHWr6WC3gnbmWoGepb1yo9KsO0GN4ZgVHlqJzaaOM4BhSVwjOqXeMGQ4= X-Received: by 2002:a17:903:a86:b0:2b2:42f8:1a4b with SMTP id d9443c01a7336-2b28178a72amr122161375ad.27.1775485075010; Mon, 06 Apr 2026 07:17:55 -0700 (PDT) X-Received: by 2002:a17:903:a86:b0:2b2:42f8:1a4b with SMTP id d9443c01a7336-2b28178a72amr122160885ad.27.1775485074459; Mon, 06 Apr 2026 07:17:54 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 01/10] hw/tpm: Add TPM CRB chunking fields Date: Mon, 6 Apr 2026 19:47:26 +0530 Message-ID: <20260406141735.25844-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485185677158500 Content-Type: text/plain; charset="utf-8" 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] [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_rc1_121225.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 3 +++ include/hw/acpi/tpm.h | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 8723536f93..0a1c7ecdc6 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -59,6 +59,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 @@ -262,6 +263,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, CRB_INTF_CAP_CRB_CHUNK); 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..03d452d2b5 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, invoke, 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 Tue Apr 7 18:36:01 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=1775485135; cv=none; d=zohomail.com; s=zohoarc; b=R0lgeWB3AWRWw0iJaAjCl8UqO6Jmh/CbEkot9HlQcYdzvMzT7MM5V+lqcMqTRjLcUvWUy+U6lP3OwoSbr7RR5TkI1gy+SWu/moSlV8ePf4KLUJumD8nvqoNR7VbBWPoqiaArL6d04M8V8uzDvBM+WmAVIz2VqVheddwTBIGfEtU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485135; 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=9wWSyFDxGNwzId7cZzvHY1e6vgl0Aec6Tzqgrzda1Nw=; b=K2ZIGUoafYrkjFOa+U0A6hugiS+3oh/8eWaymovAFp4R1qR7Z2f8IprnsvC3zQ0pwbx/SLOM7/+YpDN21R4Pux1iASzQ+AWvOiybjPWtWrsFg5UQ2LS1NsQC6DJcGFoMGoRhS7Ql5awrz1L51XO6AgRjzXqw3UsH04uQyaFqTFs= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485135093649.077598962908; Mon, 6 Apr 2026 07:18:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmF-0003tG-QJ; Mon, 06 Apr 2026 10:18:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kmE-0003t1-Fn for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:06 -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 1w9kmD-0004zl-0q for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:06 -0400 Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-122-Y66hmqORO8eoDzLycXi9cw-1; Mon, 06 Apr 2026 10:18:03 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b250d3699aso98568845ad.2 for ; Mon, 06 Apr 2026 07:18:02 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485084; 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=9wWSyFDxGNwzId7cZzvHY1e6vgl0Aec6Tzqgrzda1Nw=; b=RsaOQX/ab5Pl9aISHO0VYimJx7SNc4KhXdW/snzvj2TKeWmcrxAyIsbPLeYrpWP79S2MXr T+ozSpDDo1t3g3/5JeEUUCz8mf102j1YUlLYZY6ItWvQetmcKF18lPaNYurZvGVA98DRqg RshvV5Wr+KHVJoUsn0mZNnNHK8NhjXM= X-MC-Unique: Y66hmqORO8eoDzLycXi9cw-1 X-Mimecast-MFC-AGG-ID: Y66hmqORO8eoDzLycXi9cw_1775485082 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485082; x=1776089882; 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=9wWSyFDxGNwzId7cZzvHY1e6vgl0Aec6Tzqgrzda1Nw=; b=Di7eiQl80DYVo4dZyJJDxh5viHCF22IwFXqqr9/MZgWZ9NPki0oikOyHxi2yF0SE0V cE2IUdjRSfxFSmqVFFmf9Fc4nyEwqLv5Cdbp9Bo9uqq3mWkoOXj4r2Cb57vrUmvsV8eS 8eyrI6Z0lMmhDwTejZtCnxuMZZpOX7vLR3+JvLomz6NbyVPmWAwT4k8nkA/s0gmyJfAi WVCZlC4qt8WoD/CRTSlcHwYRNcYOzpWVt1VCWdik0IV34OUFqrRrefNd5m0v5cwj2Y2O R3/eOdrKk34Qs77uMg51Rvx8PSZf+eVz8G//rUonKMKfwLb1lwcCEO0RwhwbSYr0weA7 UX/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485082; x=1776089882; 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=9wWSyFDxGNwzId7cZzvHY1e6vgl0Aec6Tzqgrzda1Nw=; b=CCmtP6HDmNLvYDfULny6bgQXsypzc+Z2NyIj7ejyX6Ry8asoeBP7XwPambMRIX555l UJm34+43Ic4qtwzS2Y4qbxWRx7MHvop3KuvFhx2Z8fN7P8ZXHFnX6opiMmvsSgysnF/9 RtcSPriQO8x5SP9MXccwk81ip87of8IxGaouPXt/DlRWeMu6Rudt1kBy1WSRd2PNY6f3 rWa6yxI48ly8jPzmZEWD+LC907bUa2xTVqPdnIpnJ4KWnkx7FH/lm2QLB4po6hSaG5pe 3tBD241d7uuNixdov1vreYVuZX0SZSrYwh+g7eeoL+AYJIGewfSE8AMq9dygcob0GoD9 Fzyw== X-Gm-Message-State: AOJu0Yxe4ISL5tzaynsgK8jQ3it4COSYgoEgPVecTksm7Oub9FSPVvC0 JRk0N+Gy+T+RFcNm0x54Z8xbSoPbIb39eX3BFEc5D+t6mzWjiFXkCqNq65xl0dwKq70srTlzGw/ IKaqpG+jdA83Y1pCp5l1pwc47O1n26vH2cY9IPlC1bYeRpQ5Qq+VwuyuOLBtDUYqOlyTFHWjaWe M6xH1/oHGJ8hwdIxSwRcsZbFFRBc+KgV87AAnd0HQ= X-Gm-Gg: AeBDiet67jngJR2oa31oLZ1/HEbTKl8OrxXTUcJ37szgrAfdEVFDlgl1ja//aCjRK7H AE8wbqRLNf3/6NSq/RM3s4bLXnHB5AdrCw/1beHyLS/k7Q7hoSnoIKTQgTfkEyA1vGPgcoJXFbp uHArBA8akX9+6SlADbZkhPGAaekkv+hMpkATu9CavIe5P1WOgZhCuhFUOSBEv5p2hXGei3oTI3B sViQjmErAevRPH6qh+w7P+lw7AOV0PU9oqMH/DZcdVXWzglTi0s2xoD308ewEZmM7MFp1spZwvh 8EomHiSFqCN6KhbpOHMA16M2A6MqqMkFw8gXfADTr4Ft++XyU35oUp8wgjOC3WAHW4e1BAQ1FOJ NAoiFt61eqY94SkVufIKDfb7cOiq+TXIpOyKqHX1PB3kfdbDmW4HzKyLryBK1yXDFAvk= X-Received: by 2002:a17:903:32cd:b0:2b2:51e8:2c20 with SMTP id d9443c01a7336-2b281760833mr134315345ad.21.1775485081805; Mon, 06 Apr 2026 07:18:01 -0700 (PDT) X-Received: by 2002:a17:903:32cd:b0:2b2:51e8:2c20 with SMTP id d9443c01a7336-2b281760833mr134314845ad.21.1775485081217; Mon, 06 Apr 2026 07:18:01 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 02/10] hw/tpm: Refactor CRB_CTRL_START register access Date: Mon, 6 Apr 2026 19:47:27 +0530 Message-ID: <20260406141735.25844-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485137505158500 Content-Type: text/plain; charset="utf-8" From: Arun Menon Replace manual bitwise operations with ARRAY_FIELD_DP32 macros No functional changes. Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- 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 0a1c7ecdc6..bc55908786 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -145,7 +145,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, invoke, 1); s->cmd =3D (TPMBackendCmd) { .in =3D mem, .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), @@ -194,7 +194,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, invoke, 0); if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ --=20 2.53.0 From nobody Tue Apr 7 18:36:01 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=1775485135; cv=none; d=zohomail.com; s=zohoarc; b=UmF3WPnTW6Xu59H2ty/oGXoapq3QXftDbcdc5ZH0wK/bdGaW1XekOTvYOu0TZMJ6U49S4xGY+r8rGv8PtFRC1lsvyswyQxssOhDzYgIqWVxFAhuawIWMJ9tnYVhZmX72R67kV2VIU1BfkKKLRZb0rq5a1tK3H60fGWaWoLWD6pQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485135; 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=jLLYAnrleD9NK24SJY9DaTHQk/BqQZ5iTJMqFUtwcT0=; b=WyZH5UEgS8G7SQsNS7s0sKxfhYkSifQJxXEIbZI8bK/WFFuZTIS+vgpR3VG0huFeX07F5T6JRRp+yUvU1b70v8+51WUS6dBAeNvwOfQXUNzHciCDBKzybSAi1SQMid0nLHTRmKSXQmoXfEu9zHCpigxQU7hJf2qd/jQfdJeLjkY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485135226587.6893344803481; Mon, 6 Apr 2026 07:18:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmN-0003tu-Ev; Mon, 06 Apr 2026 10:18:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kmM-0003te-5l for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:14 -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 1w9kmK-00053X-L5 for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:13 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-84-B_zLYUWuONyMW_wZAikp8g-1; Mon, 06 Apr 2026 10:18:11 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2adef9d486bso62579045ad.2 for ; Mon, 06 Apr 2026 07:18:10 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485092; 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=jLLYAnrleD9NK24SJY9DaTHQk/BqQZ5iTJMqFUtwcT0=; b=g3Q1LunXN/P19YzVOWYSUUY2Z4AkyzQ/TaKXNPrwhcIEFMKGkVi2qvh6/xNrghvSjCSd/5 dqa0K9SS/c4Kizb2bCpvaiodBFc0YhLpuprXJUBd5qPvu0HtR/KxbsYbsjbb3FIrSvPt4/ +sRrmy/izXzuv812L98APvKKgkOnbnI= X-MC-Unique: B_zLYUWuONyMW_wZAikp8g-1 X-Mimecast-MFC-AGG-ID: B_zLYUWuONyMW_wZAikp8g_1775485090 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485090; x=1776089890; 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=jLLYAnrleD9NK24SJY9DaTHQk/BqQZ5iTJMqFUtwcT0=; b=GnEd6UaeJV2bJWqEFxZtfv/u86u/kkeFE/1+YWj8yjeP72fHTuzpe6XSEHcm1YDNpK xkc7rN3USfHPV2WD25mPPPpu2rGBB4zE88akP7e5/MKFhHlnIvn6WsoV0PNa7baTNuYx a9xj8wnWrVDQazx8sN874Xz8fuDHt+SlW8d47GWRTiHchEktd0NBL5dVYEqzmqtUtg5q tCtvxh5DJsXlsXzjyFOsixpizpIqI6Zv1w6oB79u+54f3iXYJv2x2ZpzTbALTVLRFA4I wDYVeKlPfFPqiJglKeZcikLXXgPmk5uknJUb+LXX1uOTPdYRgPD+CgOnafoquSZigfY7 q1Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485090; x=1776089890; 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=jLLYAnrleD9NK24SJY9DaTHQk/BqQZ5iTJMqFUtwcT0=; b=G63hV0+VW4jjc8ARNKKgrji7r9KJr+aGVln3THlhpHw/vLd25dWzh0hZq2PSqOoPW4 AZoiTlmzKxABpYFvgDLakfsHcd955dRWCQkk+EAl+4jf+Uej/un9azn16/uTlAlWD1N1 AopvkfYQMbNwd/349nkm9M9+fVyftziAk75M986E2ArVsQJ8JqxogzVypFV4f86lmxKE pjTey03FlsxzI5fkJZF388J8LDpUDn911dodyGCUWz5K3rv/jCKwkUVfDlWeWJFECK7S mLzWg+xyvm/KJiLVk3OiWzxOIQ3ngZs2A5wfdBNWX31BJoAz5Y37wikZO8kOy0kuH3AI Tibg== X-Gm-Message-State: AOJu0YxUiY9f9rJJtLsCKZoDmHFJEDy/kucu20toNUtrqDSwiy5QJlcQ /LLH0Nf9t3FkbhyLZi7wrnoFrSo3nHzgI5FyKSl5p480ymRi2fs8M2c0cHgkBMMVW68bR10BHBi tbIMr9tqr6tB6FvGKa+dVRR7aKo5+Bp0Nlqr7gLnpX5i25/8/4yEwUVopbZaEMlTfG2jkswYPfO e5RMI7eMW/9GeE2ScddHpmIpyFBZ7l10siGxS3PaI= X-Gm-Gg: AeBDieuRhRUL62/5jzaNOM16Kw8Trf1nEYAQFK5gFq9axaNVNSy46mcxEIoh4lsuTIP ywUWdCO+kgcLMpJxaPlNK4TVectV9f/679EVG/uIRdwjJBIEBLSvK+ws495edjqu2uDEGR5bdWl 9hhiaAQL9K20DCjp3mPD5zpGCRCvnLGuVLIQoBBc3wMB8Ui5m9tp+lv7Te3lZXcqv27dXsCGTlt niuHrXS0bvODTxCHV0pqSzVC9Vx1gGMTP4D0LqS11ZI/Yan3JKf2cDdWw6x0oFvA8KtKFmCyKYj tjfeTEXqK2aqkdcsyoDd0KnF+icR190vGtUAWH40ttjiQp4eet0rH0CNMSHCJWfthWJwQNINPA/ ZdCOy0J8yWqTgmxWzwrYDtFqScMDvz09/37IN7NyqygFILzAWTCoJfTEqDIzzQ+1KDvw= X-Received: by 2002:a17:902:d50e:b0:2b0:5520:f497 with SMTP id d9443c01a7336-2b28164ceeemr137327305ad.9.1775485089463; Mon, 06 Apr 2026 07:18:09 -0700 (PDT) X-Received: by 2002:a17:902:d50e:b0:2b0:5520:f497 with SMTP id d9443c01a7336-2b28164ceeemr137326875ad.9.1775485088830; Mon, 06 Apr 2026 07:18:08 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon Subject: [PATCH v3 03/10] hw/tpm: Add internal buffer state for chunking Date: Mon, 6 Apr 2026 19:47:28 +0530 Message-ID: <20260406141735.25844-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485138028158500 Content-Type: text/plain; charset="utf-8" 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 --- hw/tpm/tpm_crb.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index bc55908786..d65b3e2cc1 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; @@ -85,6 +88,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) { @@ -134,9 +144,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: @@ -240,6 +252,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 @@ -306,6 +319,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)); @@ -318,12 +334,22 @@ static void tpm_crb_realize(DeviceState *dev, Error *= *errp) } } =20 +static void tpm_crb_unrealize(DeviceState *dev) +{ + CRBState *s =3D CRB(dev); + + g_byte_array_unref(s->command_buffer); + g_byte_array_unref(s->response_buffer); + +} + 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 Tue Apr 7 18:36:01 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=1775485135; cv=none; d=zohomail.com; s=zohoarc; b=SiPV4ibgg9Hn9lv9am1pPinvKRnQknupz0aQeYaH9G8XGfo5TxvtoOqGQLHDIZpYhhXIeMF0bg9+7recRJMaU77GkYXauzW25uJCjknRHlPk/TFRKw6gGarXotL1GZOswxlADGCsZ3Alum1g/oLJix+XjUE1BygY6Cg1kn38yVs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485135; 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=7WOfrYNr8qdjwqalVNIDCmZ6n0sTZxk/tvJFpxXi1l8=; b=OW1Zsuw6D93qTiBysVQL1w/sME3LR83ApCLU3saxqMqVRToWRmYuXTpzHaWrvSFeEyonCuOBRV9FSad96LJ2e8Ww3EmRszUfF8ySMRuUB9uU6aslhRqmwPjokwRlH0ILJLV+WsOCj/6QVBCKTE4E3OSUlAEO6NUa841CGNL6/ms= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485135619207.94483568096052; Mon, 6 Apr 2026 07:18:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmZ-0003vC-AQ; Mon, 06 Apr 2026 10:18:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kmV-0003uu-Ip for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:23 -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 1w9kmT-00053w-Ir for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:23 -0400 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-517-R_FFpvZkNnuqieUV90t87g-1; Mon, 06 Apr 2026 10:18:19 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b0c92ff4ebso53623725ad.2 for ; Mon, 06 Apr 2026 07:18:19 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485100; 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=7WOfrYNr8qdjwqalVNIDCmZ6n0sTZxk/tvJFpxXi1l8=; b=ivwgUre7J8JYBL3ODY4WFP0PaVssa4cuVrubfvbIxBqXMzt88/IKqzGCC1ViuVjfOaVehB xZrCZh46J1Zcxhb9rRU8ktBzaD7qZClh2VvUqZjePPx2Q/UDMk9oXSwx08o8tsde8ORnbt zULBeTUnEOpMhjrpOZBC/WXP1afr5GI= X-MC-Unique: R_FFpvZkNnuqieUV90t87g-1 X-Mimecast-MFC-AGG-ID: R_FFpvZkNnuqieUV90t87g_1775485098 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485098; x=1776089898; 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=7WOfrYNr8qdjwqalVNIDCmZ6n0sTZxk/tvJFpxXi1l8=; b=RT5m3C+CpkqBSJpwee64nXND3KSai5BRQT4jDq8d7QLfbnua5Gf1Uq+ykud7wFdlv5 1HkT1+VtDczth9H3tnRLf0Ta1+biAIjjtXvpTbD2Od84Ok/zkuNErz/S5kuWrLX7ynbt xgDJEyK/K4cIOzIa3fllgBBxNgDgkc605DMsaAYGoxNJf6HxsUihLzVSXuLS03TRfV2K OnBFRhcyChXbfmd9bhktg2/5nZxZEwtY9UGmKn2PjbORoN++vsE2gN4vBAQTN7Pj1UP6 gvEnUA9ubGGWKmXHKtMW1qtpHtXcuvYm39LC/LinBWndItwSc33eWLD2bi/59yD9LOon 2RYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485098; x=1776089898; 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=7WOfrYNr8qdjwqalVNIDCmZ6n0sTZxk/tvJFpxXi1l8=; b=MLI+VSwRJAjvsTuLArxPjv5I6SQb9yjyJO3nvAWTF1rmavWvvD9xkrfxQ5q/HW3jt1 SIfRvHZE70EsjMqCgF4SFgvBc072rQ927Qx0lXlArnumgJNB7TlQf6Y1DO9hZUSDx4Cx 2rCh58UWE0iRtPZ0aDrEZvPF2UAoKyUHW0SQl762yUpmle9REA07uKP1flTTbHkC6zxc 402igkbACtU7KDoEE+d+/aG6dXIukRp5zAr1SpXZ1yLxfReVQg4Dm6v4KQ/CGCMxOhv0 9mkget+oXAaPLSZy5gvG1k8As/3oAFtCMehbkkt7YvMtcygoW6gL7HteAMuQZZ56N+Yh SNfA== X-Gm-Message-State: AOJu0YwPcuSx9xzIMNY4Yw6LSlr12ykZiN8tVNaeP3LBMh6i5Un57TNC jvkCAqIJOmnYRuvI0u6QSutIRcs6LsRoXnSv3oqRxq5WH1Ex3Qr3tyoLX0BGZIKTFZScxYkkBam DBKdtdfuqZUJLCc57+SoYCVlgGqVNXBWm/PHr5QeZWyPeqTdj3NPsaB/L/AdBUfL1pxS1pkImTi eMdVs4xCEaipUrLFs76gajUNOENtSwoD+dl9dpRWk= X-Gm-Gg: AeBDievkExAqrJmF5cNwW5r6ME5uJzsUvFYdK7LG9qQhhIlOns8ZsTgSVNusqzEDNKj 0MEUTUPuVcgQugtXTOCOBzcMRGI729Ppzqd65YGt7QCifrXdOHLoLrgozKSNml/bJKHtCrIGTj0 z3P88LnC60sEbg//RfJTxzkUCLeOJogS7qRIj8FoCMgkRptts9HN/yTvJUUl6U/SmYtFZQvZ3PV 6HXtHf2sZE/Ktk/K1yINfNgQIMVjgqerGZawtS35ihxzuW6/9mUG9z4AHAst1llnd07w2eB16yW P6u8W+ECW/AoCFLBTNuJQ2Tw5k7bFnwPEJmV1pE435+gffnmmooe8yBpAVtsYv6BZpsP+yYaDac DFgwsn/V/6IyjWV/2IofbB63aCWLGeXqGVmsyB6qwP3Xvie2an7yBW8PV2SpYQkA6EAU= X-Received: by 2002:a17:903:9ce:b0:2b0:65b8:b5b4 with SMTP id d9443c01a7336-2b2818fd5d3mr137028075ad.39.1775485098004; Mon, 06 Apr 2026 07:18:18 -0700 (PDT) X-Received: by 2002:a17:903:9ce:b0:2b0:65b8:b5b4 with SMTP id d9443c01a7336-2b2818fd5d3mr137027535ad.39.1775485097329; Mon, 06 Apr 2026 07:18:17 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 04/10] hw/tpm: Implement TPM CRB chunking logic Date: Mon, 6 Apr 2026 19:47:29 +0530 Message-ID: <20260406141735.25844-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485137640158500 Content-Type: text/plain; charset="utf-8" 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_rc1_121225.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 148 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 131 insertions(+), 17 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index d65b3e2cc1..b9f295db7a 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" @@ -65,6 +66,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), @@ -80,6 +82,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 { @@ -122,6 +126,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, invoke, 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) { @@ -152,20 +219,55 @@ 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, invoke, 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, invoke, 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) { + /* + * 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->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: @@ -210,8 +312,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) @@ -288,8 +403,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 Tue Apr 7 18:36:01 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=1775485156; cv=none; d=zohomail.com; s=zohoarc; b=TPFsbRbqty7YdmVPJinmGw0KSwUNF9YMIxG0lO1Ax1oNUJ+EkdjkJpsxCII6y4zn9pm1fQaVCWW3kTqCY8r33usxraMLvVC/P6EsXdYajWcqL7rhEYOf+FUUQxglj/yRItEKX6Wef84fyFX8HT7c08zg3LEGysuCVKAIAPl6EIM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485156; 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=ttNPQjucCKVQbYkQ9ZTni+I2TfWnxEihEhccHWw+Qk8=; b=lkuBrAFeuHUnqjrXVaGQlUfkDpijycYk7awHe3WUHUNnwMgHkCEfVXkksHuGgm3KuPOgpQzsoc1vLZHVH+Z4j+o4FOThamNWI5K9nv6p0Xe55g73HYqs3bnYb2CnYJLq+8vWCVbpEzx+Ak2rfILoe2ki6FWNv81hQc1lN/oyX9A= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485156683469.09706564726355; Mon, 6 Apr 2026 07:19:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmn-0003yt-VM; Mon, 06 Apr 2026 10:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kme-0003xN-O0 for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:33 -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 1w9kmd-00054D-2A for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:32 -0400 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-561-3jB7nS24MSKqNmcDT1LJ9A-1; Mon, 06 Apr 2026 10:18:27 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b2523e0299so102847745ad.3 for ; Mon, 06 Apr 2026 07:18:27 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485108; 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=ttNPQjucCKVQbYkQ9ZTni+I2TfWnxEihEhccHWw+Qk8=; b=D1s/ZwTT2wtGY2ZY1wWUbhXPRP1A+FTerBExdMYut6RWEDHN/+FzLFhGg0V+t5UHYeuvaV AKGovvL9cosFhnkMW+i0a0VY/44yb5nBvoYUb4C1Cd4iotjQFEZkZvumtVm8JspJgBjqFh PH0Otz3a4qdXL1CFrhhc3yYHvuZiIs0= X-MC-Unique: 3jB7nS24MSKqNmcDT1LJ9A-1 X-Mimecast-MFC-AGG-ID: 3jB7nS24MSKqNmcDT1LJ9A_1775485106 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485106; x=1776089906; 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=ttNPQjucCKVQbYkQ9ZTni+I2TfWnxEihEhccHWw+Qk8=; b=UT/ky7HlM8el54jjF2a3rfnPbAsKqFgVatAXw3R7315KHUQJg28XzSs+sZUXNyplBX UmkK6zbX2bugvruV2UlkrKjKE7W1dG0v/GyebdBCevNyMbOszvuu/k/4wHdvb0un7Ajw Es+OhOm2+Zj71CACS8wbJ6W+jfNB0BtFeLKWWwed2dFaw3fpFwRnGbBxl2VayteOlOZM FEfIGDHs86u12tmBMsZXXZ+hbInwLss9ZZyxeF5kid9y2pJYYYVChbROKsuxeFFKLttV TutkuKu8y+JC8NAL83RlWy/49kb4LYMKvBfGUy33A20VarfEyemAp+w3pe2/8+DogBK5 bd0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485106; x=1776089906; 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=ttNPQjucCKVQbYkQ9ZTni+I2TfWnxEihEhccHWw+Qk8=; b=J90gHdOP/t/X+n2Awa2w4bAuK84AJoX7gIFF91dW4HSBMYERh0yYrHdh7nDnPF/IiM HpWEmx14DzkYrWikzX9j8iRikXIlxDljpCGj5QG/v4VEor0FCje0HKY27IRxcTBlq+DY MLVzhOGA92OLjqG/Z9EwYxu4emxhwgSld/l4sniAGUQT8RdnMRm/QvqWQfJ8AFwmt/3m Jqj5JKF+kl78ML4w/5fUbfsdYnAvHjAgWhcowS62MsmqpndaOxFQopMVi/m1xSFzOAvi cMmnne6PXod1b8yGskxib0/o3ZMLK09yF6D5eRyIBiflQZpG9psXZxwWG6RII3coFrJS tYzQ== X-Gm-Message-State: AOJu0Yy9nFMbiNbv7M0XdBecBQppUQAk9qk/0R6RUFaVZ6tCbjrLndqP DtN3W0ykiTnNsYsKyTTFS8qxAVjIAy89ZUsfPvsPGm/E5eUVeuNzXfzpwxdSehiTW6r8EgKpUPo QOiVYPd63IvpnlQttAw7G7NuQlENXKQA/2GZRV5GTwVNuw//HIf5mkM5yikmkEtOZBb/gPDmFqx 2ObvqMqJDoHnozLHWf+GaRnXpZoW+aP+/PNKngWS8= X-Gm-Gg: AeBDievHs8JkS265huPu3Q08NWdbNLGhr7S7R47wBEteuRtMd8kjcDViLLQuSPjBBIB mcy2xXZ4Z8+VdofEopRjCyK7jbKq+d8cnPyelzDV4av63OTAx6YBk4WofTEFOpTGWaNLqWV8T+i WbTgeNXVOBNdLvfmDBFNMRuJJUFIlVBxiLl+BiGR3PJ6/JJksuC8U19drdOxfrdSHJ8ZLN8rqkp AQstxWX5sdd6TVk+4fMjXRM2tKw63uOUm01qMe/1Ys2HQFvNTxtM6Z0AzlE7hnRCshGMVb/bvgC wAebXvrFoZ+S+8sZv4P3pXsQ3pctZ6Ar6iI9bWIhDuufzqv32jrM0J+e7tF3k1E7yo8HnFGeWBd YcUGlfAvjth0ThrjZfwxThoVk1oZuH602ZwuBmdJBJSdrstrxF3DqJbCnQdLi1D5N9Q4= X-Received: by 2002:a17:903:1108:b0:2b2:5491:e32b with SMTP id d9443c01a7336-2b2817fbb01mr141426665ad.23.1775485106250; Mon, 06 Apr 2026 07:18:26 -0700 (PDT) X-Received: by 2002:a17:903:1108:b0:2b2:5491:e32b with SMTP id d9443c01a7336-2b2817fbb01mr141426095ad.23.1775485105522; Mon, 06 Apr 2026 07:18:25 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon Subject: [PATCH v3 05/10] test/qtest: Add test for tpm crb chunking Date: Mon, 6 Apr 2026 19:47:30 +0530 Message-ID: <20260406141735.25844-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485157514158501 Content-Type: text/plain; charset="utf-8" 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() Signed-off-by: Arun Menon --- tests/qtest/tpm-crb-swtpm-test.c | 10 +++ tests/qtest/tpm-util.c | 108 ++++++++++++++++++++++++++----- tests/qtest/tpm-util.h | 5 ++ 3 files changed, 108 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..603c5a825d 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,74 @@ 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; + + 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); + + size_t 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]; + qtest_memread(s, raddr, header, sizeof(header)); + + uint32_t 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 Tue Apr 7 18:36:01 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=1775485150; cv=none; d=zohomail.com; s=zohoarc; b=LEJbJ7yhVX4EpoI2KFOW5Dc3+SCZFMRnm9oRVKdwKPSGRNbk5jD7pNAMKfAO6Xz5mxmjILR3JY6IU72ir+L/XgR2snHOJ677dtRb8OxM7VtXur5JCWwImNdweOj7RS+4cMACjnYmh4vr7GvfEQY6KaCzkB7cS7X4VmReN/w67hk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485150; 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=wBU+397EypgY+h5PHONu2tHrEibGvEnQLvVz+RQFsbU=; b=fzozZ7MVvFU7rBD2AWj/TDk1n9njyYD8zgCgafJ4zemEG5tAGO9Sg5yFJMh2JHfMudPa/TGyy8sIYA+6X4ACoDIe6WtyyPUpHc+dUCCp22xA68H1K25Gr62d52fnx0QbJdzKYziuUedh2/hG1m8K86tT/Yck+QmxGhjb5mDpnQY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485150967515.3620324769604; Mon, 6 Apr 2026 07:19:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmq-0003zx-AL; Mon, 06 Apr 2026 10:18:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kmk-0003yc-AC for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:39 -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 1w9kmi-00054S-Pf for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:38 -0400 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-583-WCBSQPzCMUW-6NYjdpZEMw-1; Mon, 06 Apr 2026 10:18:34 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b0b57e192bso31466095ad.1 for ; Mon, 06 Apr 2026 07:18:34 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485116; 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=wBU+397EypgY+h5PHONu2tHrEibGvEnQLvVz+RQFsbU=; b=hzUIvVjwAX5UZEWS30WIt7m9OpOSIjMAQ4JwPp9Dne1Hy63hvkElLt3JjRLf01VakWYGvB godjcUOi3e4ZBeqiXQG7BGlS8Mu8sTX8X0ncKooVpYG55Mqc1Z3dc2kKenpB+Vou/9c29w ay5fENbLjY3PPz6Lo1iuOEWI7rYu+dc= X-MC-Unique: WCBSQPzCMUW-6NYjdpZEMw-1 X-Mimecast-MFC-AGG-ID: WCBSQPzCMUW-6NYjdpZEMw_1775485113 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485113; x=1776089913; 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=wBU+397EypgY+h5PHONu2tHrEibGvEnQLvVz+RQFsbU=; b=gqTwhPRKEEtVEeMBzF2/uyPmPDa2DMYJrg9HsKM6DE5HtTJX4kr54pjJLy7mQCJyzq mE8aKnYs+mcjfqZ06ae2YJKQGg/IeJsM9Sc/QjewUMrBcXuI68blj3mDBnk/Y3ab9hL4 Bs/Jp+rygJkHv2J7uPW23ovndjD10IujqMKGHdlnSHydN4zyWYcZx+/Zwe1nqEtk+nYP 0ZYEK4K/NZ1BOWOh2iDFA+aY4G9RNB5mLZns79KNar5uGD2wIR/Nx7v9JYKrYQqBMs4A 0vctltP+qPjFJI5GT3IIhZU08jsySSavdUHDNj1q4V/pRwPRd1OSAeRTEu2EkzrK2IW3 pHrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485113; x=1776089913; 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=wBU+397EypgY+h5PHONu2tHrEibGvEnQLvVz+RQFsbU=; b=cqqMZrwA58TjpJDBSlwx7RmsIVnEc3XnneeponHJCKT51LnVhyc5XGygu15EeuYssI HVZWt4lx127KInh1QEHQW9PfH6+bY77QTXMRrEKHAiGEM1/oZ0wXsz749KH2fVMMBetB vGS4GU/HSa7Trj1z7ZcnI0lNrP7X0+lexdOJgn4lgVyjgkGggJSwkzRoa/i+zflbhft4 ryxj4nWgHe6YadJx96Inl1EFhqgUZxyomsJ6WD+CgUqq2//fuc704XFTqgTPmyGtiPAU BpKBxiaPPuyDt0QmcXXx83lmsVPfF0i/zUyvwxxVI4iG00sD20DFZkRtLfRGINgSp7mN gzvA== X-Gm-Message-State: AOJu0YzDUfv6pHIrec/dhgKww26gjZwW+TPVA59//qxcVbq3LmrlJUQf kxLNER8f8CibjyJRSDY3/suigUPqnJ2ySGZlDUhQnDwOyqgrUrRHo0V25wH2ahQxx8R833Ttmdx DnXNf/IA2/Gb5PjlcqmLM2eRD9O55teJVJl12a8F0PBqMSPQj2ZO5ePdjlT7eQfpM9mk2IBaqMg agN8LK7Kb6818+ugoDy4NKDGTIZXjy8sy0r82mvjs= X-Gm-Gg: AeBDievgQJVG0n7657SfnvjN/TEXX7rTOew4mXNwb8CUXk/eI1NayG//SJUhcSGWD/s 5aJJKwvct/E4+SERpBkQqmXEP8Rd4C6tKPft/hJ16VA8f+1bRsq1l+StmDj+xh2/qjBN615CzWv RRd9WxTdiayG2oa9mAe5FBY79uqMoSzFaljVDCcne7957feWFUwrhURL4mz/q2a7YHRFLqnR2cw z2UvBydtO6r5SFkIiipvYnFdWvr1d5ShKUsJvphXFlkcias2WQKjFpToHs0O5Qx2KjQEJhzRMLt pzhSi8y+cex0ZroJNZM/zz4DHzWCIpVh0fkPD2H+dRagZnUeiCDuPdNhC51pgyACwAPRA68lfMK 1jHMXyP/leCaEW9tOa8K539haZHWKMRm7IsI1e3KQearsuL4aChjcssZQxpc77570SEM= X-Received: by 2002:a17:903:1ae3:b0:2b0:afad:7aad with SMTP id d9443c01a7336-2b2818016c3mr133742145ad.45.1775485112933; Mon, 06 Apr 2026 07:18:32 -0700 (PDT) X-Received: by 2002:a17:903:1ae3:b0:2b0:afad:7aad with SMTP id d9443c01a7336-2b2818016c3mr133741645ad.45.1775485112390; Mon, 06 Apr 2026 07:18:32 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon Subject: [PATCH v3 06/10] hw/tpm: Add support for VM migration with TPM CRB chunking Date: Mon, 6 Apr 2026 19:47:31 +0530 Message-ID: <20260406141735.25844-7-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485151425158500 Content-Type: text/plain; charset="utf-8" From: Arun Menon - Add subsection in VMState for TPM CRB with the newly introduced command and response buffers, along with a needed callback, so that newer QEMU only sends the buffers if it is necessary. - Add hw_compat blocker because the feature is only supported for machine type 11.1 and higher. - If the VM has no pending chunked TPM commands in the internal buffers during a VM migration, or if the machine type does not support newly introduced buffers, then the needed callback will return false, as it checks the hw_compat blocker and thus the subsection will not be sent to the destination host. Signed-off-by: Arun Menon --- hw/core/machine.c | 4 +++- hw/tpm/tpm_crb.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 1abc8ae737..fb290c6c53 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", "migrate-buffers", "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 b9f295db7a..81471dd9f8 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -49,6 +49,8 @@ struct CRBState { =20 bool ppi_enabled; TPMPPI ppi; + + bool migrate_buffers; }; typedef struct CRBState CRBState; =20 @@ -345,18 +347,47 @@ 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->migrate_buffers) { + return false; + } + + return ((s->command_buffer && s->command_buffer->len > 0) || + (s->response_buffer && s->response_buffer->len > 0)); +} + +static const VMStateDescription vmstate_tpm_crb_chunk =3D { + .name =3D "tpm-crb/chunk", + .version_id =3D 0, + .needed =3D tpm_crb_chunk_needed, + .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 static const Property tpm_crb_properties[] =3D { DEFINE_PROP_TPMBE("tpmdev", CRBState, tpmbe), DEFINE_PROP_BOOL("ppi", CRBState, ppi_enabled, true), + DEFINE_PROP_BOOL("migrate-buffers", CRBState, migrate_buffers, true), }; =20 static void tpm_crb_reset(void *dev) --=20 2.53.0 From nobody Tue Apr 7 18:36:01 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=1775485139; cv=none; d=zohomail.com; s=zohoarc; b=GmrGT7MI/mXso6f5jx4HPi3U6NCaVryPNnrb+U1kHpLFHUahm57SizhfxRfsPOpXpQWRvho1+8borrmsB2otWn2CQunRIvBQaWQlRjjO379wSjX7WfaplZ0NIS+eSK0l8/xSUkm8IweAdNsyUe5NmKGSRnszPadA0g+BH02RewM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485139; 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=+sg9BWtJy13Moaz54t3chkQyG4VgTEMPjkH1Yg9V5JY=; b=NoIyUyzZ9pL6dOW5Ic3bB/OxO7bwEF9Wy/5xaC+is+VYp9oMXsXViiq584/H7PMsYRmgrxpJCMkhHCfEjfNS2BBIYqasWQ3xKTHeJy1TIIGZ6xQb0w1ewPkc8w8rU3SBVBN9lXaRJ8zno8cICLrTwlF56pd7ihwKBVXwHJgQUAs= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177548513999026.56746380276661; Mon, 6 Apr 2026 07:18:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kmu-000416-DC; Mon, 06 Apr 2026 10:18:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kms-00040W-BC for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:46 -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 1w9kmq-000553-S5 for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:46 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-204-MmoDrjCnOA6KYEZO75OgLg-1; Mon, 06 Apr 2026 10:18:43 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b24af7ca99so52828555ad.1 for ; Mon, 06 Apr 2026 07:18:42 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485124; 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=+sg9BWtJy13Moaz54t3chkQyG4VgTEMPjkH1Yg9V5JY=; b=O88iymfWqmge8GX0H9yyk3pJkVrtwmBZNUo3ginRL2DbLDHBgbQ3zmYnDRTKI/dBCtJjDU EQxAZYetbDNhdLCu3EIBzDuAGKDp9nT+skt0K0M/MXhXC94RqO6OXMMZANEgqrqYcMl7zf RIkkTP0tX24yLcKUJKQno8v4MnKe+28= X-MC-Unique: MmoDrjCnOA6KYEZO75OgLg-1 X-Mimecast-MFC-AGG-ID: MmoDrjCnOA6KYEZO75OgLg_1775485122 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485122; x=1776089922; 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=+sg9BWtJy13Moaz54t3chkQyG4VgTEMPjkH1Yg9V5JY=; b=dic6bptG4H4mQx5+zQbj8QVDov7pgkpbXj9wrQeKtGuvNLTwyan9yNwZp/ymbeY/d/ 9riZwgdGixJU/VAOfh0aSiGuTHfpqUwdZRvlwPp1e8TcZHVbtadD5I4ibFLMbr7lJZO6 mXtug2lgp76MA5YkBtA1dfJz3OPk1OxeN3Dgdwzp1skn3tTlbcAfrCvJlwxG25PggfJg nPJqJYx52Lcl3h4YoiGwW5wFoz62YHT60IY4GwNusI97QISGRDAg7qQQtcgSegN2PvL7 P1dJcDquiSREoa4k3qBW5ctJgfvzkBcuiqCL6EXq3VeT+57lQ47y4IPoKw3FtC08MEmH 2PWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485122; x=1776089922; 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=+sg9BWtJy13Moaz54t3chkQyG4VgTEMPjkH1Yg9V5JY=; b=HGk0qCvlw/6RnGhe7AqLreye3T1SlPO2YIZMfz4DAnNWP2iC7CxoEB2dDJp7iaMnvx QBSafjYxfqH48zgJZaqVkyaGikl2lw3iVbD/5Gmmn5QDQnotMKPJTxnmSDfcOUrtyZw4 1ushc8XYbMKsNs1s85feYHA9lDrIKdzHQU7jN7L6qmYBTGyY2A1gscjjn0M9cXeWhHnA sqQxc9BVIaLSDA9NsaAYgNSpY+vEtuVnuNJzbq1fJQXvK9ZKA+hCp2+T9+PmuaDY+1uU oZ9l8wSLiTCoiKqARtWI46VAyeScy7HxBrB/pddYuJyJCYq+YgMS6MU07WlZ8jO7mMBT epKw== X-Gm-Message-State: AOJu0Yy0Zv16A8Y1DMQf/FjQvueFqptOSG5YO85/FA4UnjXouwetWA1g mXqQrRhP3qFr1PnenqxoXKXGkUJWtVonM36lmHma4KLYrn4XIWbgounbLOAcdX0RK5y1UYWVZ8H OfIHD5vemzj3M1EVz9U/BtUdE3LRDfFI/1eYQJ/cEyIAgZp/qhAoC7IhvEhLocmL9PUKNswwlMS SQZZQdddxwmJATyKLBPyifV/YZgu5wNr+0dvWD/ws= X-Gm-Gg: AeBDieslYHJ0Nz+vOGbRBgqKTsOpTHo3aWdYL/rnCAExmCNhm/wIwSdlp57670If7Iy fc0ggkh+IbHiXdYOuJXcwXOPS7Nwb7LIRnNDRXb7s5nX6yUIWNVZtlWRdavmWICwGxhRBQzyEmo 3rV0xmOy4Pit3Si818h+0oZP+TdsmxRWp7ZYY/10H5K6Ca9V9W7jQdkPs3g85/CbvhVX67RXXCQ 7TTttmtZpPJ1fo/2HmCUO9YCF77GxdA0CrpQi0970ko8pWVw/5K/i5IV7mJzrnhZo8VL0n4cZRT 87qGMaVgrf8hpDxLTArtNQOX8SmNzOcOnsjLCmrjDUWsV5SMbr/K9CY57Wlai/ZzPyVD1WtfSaB U6rymxfasJ5yBOqSWo4ywDbgnmpBt9Wo5JXNfXnwHg6HpX5NIXYDSuWgv8Cxgac1D/H0= X-Received: by 2002:a17:903:2ac5:b0:2b2:42da:25cc with SMTP id d9443c01a7336-2b28163ad55mr138537685ad.1.1775485121701; Mon, 06 Apr 2026 07:18:41 -0700 (PDT) X-Received: by 2002:a17:903:2ac5:b0:2b2:42da:25cc with SMTP id d9443c01a7336-2b28163ad55mr138537045ad.1.1775485120933; Mon, 06 Apr 2026 07:18:40 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 07/10] qtests: Enable starting swtpm with a given profile Date: Mon, 6 Apr 2026 19:47:32 +0530 Message-ID: <20260406141735.25844-8-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485141452158500 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 603c5a825d..24243065c1 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -210,7 +210,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", @@ -220,11 +221,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 Tue Apr 7 18:36:01 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=1775485180; cv=none; d=zohomail.com; s=zohoarc; b=Ve/ilDEH9WGzmw8gHUGHzqOUkle+sYQwmCwen+mr1VVYSAnd6xzGNK0YNo/hyRonY9pSyHD8yLbYbn/C14B2FzZwPcgm65rJTJj8vegdzaIvXhu8pLVe+GdctC+zrRX5qvpXMd5L8yMe03ZXy0IN07SRAnXYlJ5SBXNyHbQk3MU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485180; 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=FsZ0r9k1iqZjmeQjH/H2Bi1lOvYyfsSHjj2hxULrQkQ=; b=j9ak+y547sBahOuxs09FgALZDSmSaiWG43un0dk0Y/8f5S59crgXT0B+sMsJY7P6Sa8adSD4562QZVYl+P+1HBHsT8vKnJkI0n1ejRlr584kyfdKTD6vcz2vhbJHc5eiOD5Jvz4VH80L4WqdpmcrAo5eD5XtgZsLJgM1B9d7yJs= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485180678109.68499414860446; Mon, 6 Apr 2026 07:19:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kn3-0004g6-HD; Mon, 06 Apr 2026 10:18:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kn1-0004Nq-2m for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:55 -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 1w9kmy-00056t-Rj for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:18:54 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-440-RQ9sWMOGOy2UL_fmva4Wcg-1; Mon, 06 Apr 2026 10:18:50 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b2454fc131so71220185ad.3 for ; Mon, 06 Apr 2026 07:18:50 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485131; 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=FsZ0r9k1iqZjmeQjH/H2Bi1lOvYyfsSHjj2hxULrQkQ=; b=GnK3uGcXkAMtYpuSGiERrodjkL6goOsTVQGqVjY0VPXe/TLmoiT6cfgKIhFFH0TKvwwt9M HZxkhHCFUQDkH6R4Xdcsu5NoRyuCkUOcpG7WcXP2mV3auWyRrXnXrvfbPBQs+xztklS7i2 5lkG6AgShwGR3Ibf834I458+di/4Cu0= X-MC-Unique: RQ9sWMOGOy2UL_fmva4Wcg-1 X-Mimecast-MFC-AGG-ID: RQ9sWMOGOy2UL_fmva4Wcg_1775485129 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485129; x=1776089929; 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=FsZ0r9k1iqZjmeQjH/H2Bi1lOvYyfsSHjj2hxULrQkQ=; b=KhWBD/J0Sqis0Ijiag1To/c/2IeSS9RL5RwHfVJpYg786kSA7CJGhICWk5G/4663yG S5Yh6BKMwPaU32KKJmzL1U2RHSx4Yd3go4L7ixG3FaIvld7BaaE+39+ZDb20TmiZKP0F yZewzVdIrG8EUOCv18orefl7AtkmAkyxes7aeUtJ/0RMM7x1OHVLK+KYLpBNvywXKrr9 bEI8fYijD6OgE9Zw5OjoINRlQ+1pkhyVjHogshm7raxJlIs15c5hLNMhz5BGMcaenpKq 8Bd7ocUHjB+ig/hA+M1wezLd98VVYoYu45JwB/CJE2Ig24Q0bNY+zmWp96eVjB24ndcJ ibQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485129; x=1776089929; 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=FsZ0r9k1iqZjmeQjH/H2Bi1lOvYyfsSHjj2hxULrQkQ=; b=XNJ4+ggrgnejHcR2XLIwAlEYRf4lvHtq9d78tH8tzKkmQV3gupgjQOMYWxgeZAii4X BbKfeDeAo+pEunNeX9QuRtsx96d7fnXSiBlccI5pKYo5JIn6XxziXimN2+izTBaL6DYw Dz1M7OEUhbRjQlebbuU+lb+b55lu+p/ReClVNPNBwnRRFaXvlTmRj90pHQKBWmMrMLGs XZS6sqhKhrAdTz3OkTaaB53JUIHuOUHSbKeFI0YU6vcS+tlVXXrA1zNKPuj/0m3QhPXV mT2AdJ2ja+NNA6gulco9p0Lfi7bFc41+x9oNCP8dGpNXUk9GBSPzw1OAa5KUei/eo6t2 /Sfg== X-Gm-Message-State: AOJu0YwvdUJJpTOFKu1JFSAwlLvHCx8Pfkh349PQ6UUD8LbDlDr24VpQ vORIu/LXaO3lv8xQMzMNogODMeDziEGFNPx/+k9G52CKV3JVkCXnBeTqFkcA8HOiWkayyqdrswo gh0Z/ibDbfyJHlhT/ix/M/J6oNiyunxdHllw7VQB/0gnLDW38hWjyLw1Z764dzQzvKD7rfT2x4t iQiEbg7UUxXEOZ0jsB4qy7WJzw5XRScmlfPLRAjiM= X-Gm-Gg: AeBDiev6J0kS+XZqxRzjMki6bnhaLPT9dRwbT1/2/uy6ZfDW5d2MmMQFgz/rrtbmLc8 EgI4PhwJNiYXSJHPHV0GaJ5xDNroAggNBRNz7FVZubljWbYf570GE990WqkIv3ZgUTKP/x2xI+B Jk+8g5u5PdmpUxNW705d6oWBjooJMrkfKL/YjepBwdsS480VQf+QN9D3eG/Axq9YzjuZZXK3xyv CsLGvVwPwPdZ+DZsqPP6bFS03iEzCRNZYNH6NEzDmWEfwbMcPhFzhfN131zNX+U3+ze2ZIMjhSr On1P8stsR3vhUWBBvdtiRbyBtXOU44uc2TLjV7l5hiQkd6+2t5Vfb98maSaUHqFb6200Ktv5ihI oDxKOozslS4r+bMA6CKAJdP/PMM7+dyYhw2nBLCpjr2NXbYNTsjwajzilJJaJuZBgoro= X-Received: by 2002:a17:903:1248:b0:2b2:5857:601c with SMTP id d9443c01a7336-2b281888579mr136946185ad.18.1775485129215; Mon, 06 Apr 2026 07:18:49 -0700 (PDT) X-Received: by 2002:a17:903:1248:b0:2b2:5857:601c with SMTP id d9443c01a7336-2b281888579mr136945655ad.18.1775485128537; Mon, 06 Apr 2026 07:18:48 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 08/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with CRB Date: Mon, 6 Apr 2026 19:47:33 +0530 Message-ID: <20260406141735.25844-9-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485181685158500 Content-Type: text/plain; charset="utf-8" From: Stefan Berger To test large data transfers (receiving and sending) that make us 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 24243065c1..6163f5a533 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -209,6 +209,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 Tue Apr 7 18:36:01 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=1775485146; cv=none; d=zohomail.com; s=zohoarc; b=bg70QLfMYN5Yx6vwX5W2Ev05dnAob7LyxxTyMX9rS5/Qb+eaS91L8mSfp64aDKHUZjzq97QjihzszIb8ZiG4TIxiWJNxK6DksIxUjhk280XqxnoJ5xCxrAF9nWLh7erdl0SYFyACt0mAu88Ewki3hkfn/WloIu0iMsK5VoZkxvY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485146; 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=OE3r8Pd7/Qmw2bLVYjmkJtrd3PmUzk/fGhfl4M9xHc1mLgInOVRq2QbXg6FEUrvLe2z0O6+JLNW9as55clDn9F2rWoN1EZyAJXAL17vkOuvO6hUnDTrXRFomLW9X4CRPMTegnuprpqdl4YguKz7zk1A94vUos+A51KsQFUreiuI= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775485146215297.84887673350875; Mon, 6 Apr 2026 07:19:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9kn9-000598-68; Mon, 06 Apr 2026 10:19:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9kn8-00058W-0F for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:19:02 -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 1w9kn6-0005Fn-2x for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:19:01 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-591-v5rrIPv4MceRL9aJKZVDuw-1; Mon, 06 Apr 2026 10:18:58 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b24e9b4d82so51142445ad.1 for ; Mon, 06 Apr 2026 07:18:58 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:18:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485139; 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=Cuc6uc261GsJuUWQabYiZQwRZLmXHUmnUeMaQQ1i3U7Je7R06chzsZKoTpJ0Rl/XVcHT/t BvWS7Eg5pSmeHMAks2P7ve6nC6dQx3JkoNaNr6MWf1LoH6t/g3Shqn0h+IYeY0aSv0ebKC TP93fXSsupwDd0NfLWA/LZva5fIEoKQ= X-MC-Unique: v5rrIPv4MceRL9aJKZVDuw-1 X-Mimecast-MFC-AGG-ID: v5rrIPv4MceRL9aJKZVDuw_1775485137 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485137; x=1776089937; 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=AY6mdoq6zD71DR9DALychDnXMhF0H5RUmyypL2aJd82CMQmEKJA1J57kSJgGoEcQVF sVv3oWRGgV+YMpkQjssEn6qGwdDtl2LhJNHlGqpYTVHY561be8/zziRkcvXFaXIv5cju XFNP+kPh3C9cSUrixTlnoUDi3KqVEEBMPo258zIZph2MimfXoyjqs5h8m0NCLb+hogvs Bu/e3cB4mUDfooU1ji6yrhaCIhvkbGn6ORtLZMlWvADobsSN/OEyGVbynBZcjxdQAGht WOeHR1nfVaV/geN+0GMnTtu1XktWh99SlKmpzQ378BTVPFKtL5hJ0c5rvh7sS1ZCsyxu +6MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485137; x=1776089937; 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=TrWvzaUBdogGhfiwnN6MQox4Fxp4tAQjgQap/vuoqQJXd/g5iiMXE3g+zl1g0l5TA6 F2YMW5dk1l61Rypnt4h9WdPPCQnlO9gT8EhSBEhLszv7dFz5dWokX6iyZ7tFHd/6CQEI j5JQQ/soU3Yn9qWJh1RLct1e6fgsBWsNnGAE+IUSm0xdR9XLLcI6qZ7vLZFmA9kj5Rpz MMP+sC9oKYnVkOc2WS3jW6HU2dSMrR3o6birOrjkyVkg54mqjekwab5bU0aCkmK8gwQq dksQLqfLyhySzqMsyPSOpj5W2xQpJLHW9Zki+ZgJOJ1obmCfC4cLW1ESPmLoHpO2nVgQ G/xA== X-Gm-Message-State: AOJu0YxBAf9STpcN6Isjo+dD/4lh7fBagRAdtVhwsoNVTunD30OYbead BriigfjBSAkB91rBT+BNcYTdkEp1ezeMwS1SD1JWI8RSD0JKFD17YKAzKpGzK1RFMwyt7Vy4hhf ryW0CENgoDyrNGDPIRO9vdJorDberyAODXcvroZ+3T1aSjnd2Sb0QNnDRiWpMux3iGqGc9klFQy N2+NzssogNFDrygcH2nQyi7ABxCXkTMwOxiYJSVh0= X-Gm-Gg: AeBDievLYpfUhXIGOp20PlXWAHJX/Bwhx5QK01V8nmaJ7YP/S6rLXiP136GOwlOd26R jkh5ceyYRwp3eZ1/qe1pJWF20aE3XdHhAC5h8dcQOxzNZVzVfRAfROoatNYWDqqpNJMsFOUXqKF F9TxHt2BTrXheNI5+8COOm+Snhs5c+ILdyeDcPpYbkvQ8n+FIElJ2VkuNLAg/G/8iPsCdddwBj3 bPIoqrZleq230YQIqQZu421bd1RyzQS0XspXyKiT3kPHp18p0OpoodZWXk97xV8WOl0uIc4VCGp obujG+Pzut/jqCr9n76WQhooJxTksPXwv+OS7vtGvvKp7smbzXBKONwyNYTijI9PXe0ueG7kWdk RsvUX0kgcoAI5OrK2pzeEzx65cLs6iYkCS/mu3KvgdIU4tWporA7D5Sn4cWQ7JH8kqzg= X-Received: by 2002:a17:902:f70c:b0:2b0:4fb3:c771 with SMTP id d9443c01a7336-2b277d6372emr149470805ad.6.1775485136598; Mon, 06 Apr 2026 07:18:56 -0700 (PDT) X-Received: by 2002:a17:902:f70c:b0:2b0:4fb3:c771 with SMTP id d9443c01a7336-2b277d6372emr149470345ad.6.1775485135989; Mon, 06 Apr 2026 07:18:55 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 09/10] tpm: Extend TPM TIS buffer size to 8192 bytes Date: Mon, 6 Apr 2026 19:47:34 +0530 Message-ID: <20260406141735.25844-10-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485147467158500 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 Tue Apr 7 18:36:01 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=1775485155; cv=none; d=zohomail.com; s=zohoarc; b=Qc12vDArF6QIXfe+jYQT+0OIknaSfey7QXyY4aRBihHsFSmPZd/tkreK7mac8gGhJ8aNCx4Fop+xibxBtcpY4Ura5R5OUAME/jUClg41YW4GcIEvzUtm1YOOKxGr6XNI/8ZVF8nQRLCjeistrfdsLsvH0uZSkcajnc9uu09M9KQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775485155; 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=NFsPbyLIHz9dD7Mn1Qny76d+2tgr62a0pdPCO6FramF35nOFnegQqNgs6Ch3aB6RggMgrxFWv4O/8O0yB34BW9+QKfcleK2OGbvYrgC8jBZFuF1bl5AKr1ig/MMIWNwDncDUVFvA9WcuQ4tX0gAFxeWDYb2r5KFjq1Lmd8LCFGU= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177548515577113.853709308256498; Mon, 6 Apr 2026 07:19:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w9knG-0005NS-EE; Mon, 06 Apr 2026 10:19:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w9knE-0005Jz-SA for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:19:08 -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 1w9knD-0005HH-4r for qemu-devel@nongnu.org; Mon, 06 Apr 2026 10:19:08 -0400 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-527-BBBJCLqCPbeH-YIYzinuIg-1; Mon, 06 Apr 2026 10:19:05 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b24cd2e2b3so43257785ad.0 for ; Mon, 06 Apr 2026 07:19:05 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([152.59.100.84]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm156732905ad.29.2026.04.06.07.18.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Apr 2026 07:19:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1775485146; 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=cspm+AxxAqbaLast4VyyHpXONY/8i283PAg4WfCA73GsJm+UiO2HKLjnlaBRpc87cGuSE/ x48KoGFosKDA8t6dDryVnHXY03Q+3hqBydKHXLwoHDYMBfR9W39W/N6vVSovE837YW0cm6 kWjgOIl9yCLU9+hpi81OK7f5iFW8Hes= X-MC-Unique: BBBJCLqCPbeH-YIYzinuIg-1 X-Mimecast-MFC-AGG-ID: BBBJCLqCPbeH-YIYzinuIg_1775485144 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1775485144; x=1776089944; 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=A91zq6QmNV5g7xguHaAViu03u439ncBfVSXePe0LG9yG/TwuPEWYRRKWGjlRevo600 vRFOsz5/z+SUCC/maPlt3ubMFlhLUVZ49wQtOYhcNnmo/pw129H1BkfSZZIL+WcOFEx0 aX3SHocDuEpn7QcaTq4+Q7KN8B/gFgYUhB8V2di88GMl6c8F8GOxE1fM7XrXfoM9G20z VDn/gJ08JsBP7lmPuZntvETDxNJrw1cIvyAM76azPtcGrJKh350bVOutFLGKHGxXO+/6 I2fc17rGiL/9cbXyoZiocr/K+jrDMVlCWsm4GNc5IQ3HrDSyTeiOfVXXKl3qwecgIF8R JeiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775485144; x=1776089944; 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=hTyn7YiSKUT6PYPHn5GLKMEFvu4d+IREtD70vW1rFr9WGpAXMyER8z1Kl9humELuB4 6c8ehin0hHqds5KMPx5s5AZh8yh9IQ/NWmtnyWGKDVGzWsTTQj/4p12YmlOf7+/Ak5LP 0gMtA4VemBI+pfchpgMJIS/wvBZq40plcEcvDZNCP/pFIkezseuXSpMHUd4QjxzjtrOz pI3LKHmVnG3FG8l7ZIxfAS0SnB02QQzjapuYJm6jy9BTSdEQjznD4Wd/3wXdAHcL6P0w f/InYNEYE+E7FvI0P3srQ4nSqqHGuKqETlQcrAKqSU193kfA+IFYKdFxsiI4MxBm5kPZ 7xRw== X-Gm-Message-State: AOJu0YyBzjy1RnuPOJ3O13hrdZoWoPdqcSbohEDYrSDjzk3fKjnwGeUA A6+V5p8v4FOJapSff35aruABOJjOSNWzc3MFIAdZbFKEl6TnrB2vWzHWCQyqhhyG2lWfFm6oUza 2dYhzrdLqwgkqTpMrrZsCuiPYkFc5v1+nAPwB3U3EqtvNE/nb+zAu7eHanfkI6Wh6VbOMcNZ5EK KWnw4frqZ7WZ3a/3As5McNBQ7inlQ7Rh2xdeZcWxM= X-Gm-Gg: AeBDiev64axyZ9IiTZS2mV3CDz+2B62i2dictbYva2kCrbqKk6Ze7iGbC7gkUjsO3Fl cdqXoCyurny6RddgDfusDPeLENpyz5CBfjG60pVQ56G7YmSSKdMKIDQSh/HIvsi48Sfbf79qVI9 aO80CEWDZZdy1z0WCLX4CwQ0EF8Zt+fTWoolerXy40ad1GexcKM6pEVihiklHkZ0+m/p80DFomI cOyhNtB5dZGcFz3lDO3b43Rw0aI8vFDoM9GoebXk7ox5OqzG1G4PWmp5VFO1X7pU93rB3imw2fU w8gdgkaBhJaSqct4zrONRkDAA1tOAYiebF/vZhQECQHu8c89CRzrNUPUmpHFcHtzhtP3a0Uz3U8 NvQygCXDqjIndOM83Vr82Ug9lnpGNcisZmov00jBhWPOi6uCsz7GZSMS2VB+K+HrkLpE= X-Received: by 2002:a17:902:c14b:b0:2b0:b075:f2fb with SMTP id d9443c01a7336-2b281855cbcmr96500135ad.35.1775485144093; Mon, 06 Apr 2026 07:19:04 -0700 (PDT) X-Received: by 2002:a17:902:c14b:b0:2b0:b075:f2fb with SMTP id d9443c01a7336-2b281855cbcmr96499605ad.35.1775485143247; Mon, 06 Apr 2026 07:19:03 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Laurent Vivier , Zhao Liu , Stefan Berger , Marcel Apfelbaum , Paolo Bonzini , Fabiano Rosas , marcandre.lureau@redhat.com, "Michael S. Tsirkin" , Yanan Wang , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Arun Menon , Stefan Berger Subject: [PATCH v3 10/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with TIS Date: Mon, 6 Apr 2026 19:47:35 +0530 Message-ID: <20260406141735.25844-11-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260406141735.25844-1-armenon@redhat.com> References: <20260406141735.25844-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=lists.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: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54, 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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: 1775485157536158500 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