From nobody Thu Apr 30 00:40:27 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=1776155445; cv=none; d=zohomail.com; s=zohoarc; b=C1otRi1MLJa/6yOy6UkOItSRIshc9xbnw/VSGLOUtVLh1TS4h5tJ/bnkf3VgapciLT0bs3NKP7c7wWzve2HBlRiAYh/sGJ/QPGtF5ORVy53p3IJBXPIZOG4VLfIukBOI10zS1yKg+59qH8WBn3tZ1E5uJ4346gzDT8I7HoytsUQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155445; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8b4xtkIhhKFmSZ8qyvLhxx+v9owHMfnrKqDv6T+JeSY=; b=IB5AkB5OYY2a+RqVQAn8lKHbI9UApj5fRQQoNfPqp3b2582Mn2PaTRLGeIqz3Cf+jF00ZsOE0S2P7G7UWGHmWk+K0Zlj9EizX02Wk5bVo16X98tHr/5RLLAxHkeTsES9EmF3nTqqffLpDN8lKKXI+V5F4CajPBGThTRnMZCM/WQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177615544574289.6080504255383; Tue, 14 Apr 2026 01:30:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZ9v-0007aO-1z; Tue, 14 Apr 2026 04:30:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZ9t-0007Za-QY for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:09 -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 1wCZ9s-0003yW-1y for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:09 -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-479-LKiWTZFUMqKa881Uj6gn4Q-1; Tue, 14 Apr 2026 04:29:50 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b4530a90fdso48062265ad.1 for ; Tue, 14 Apr 2026 01:29:50 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.29.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:29:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155407; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8b4xtkIhhKFmSZ8qyvLhxx+v9owHMfnrKqDv6T+JeSY=; b=Tsh8YWOX+dlPmcwLIqtlRA//6uxqoTSM09V34l4ntIGzm0nzG9Bf1YE+gfli7FQUaGzfFL BtMnskgxs5KBpjDsOKE0+Tmrsqw0E2i6mQB8S7t1WWoy+EVMMoUdFvyGxHBqLKxslNISI7 qj5jR00hO1Dvsiw6o6X7r/sLN3hYrvQ= X-MC-Unique: LKiWTZFUMqKa881Uj6gn4Q-1 X-Mimecast-MFC-AGG-ID: LKiWTZFUMqKa881Uj6gn4Q_1776155389 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155389; x=1776760189; 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=8b4xtkIhhKFmSZ8qyvLhxx+v9owHMfnrKqDv6T+JeSY=; b=Q2brY/xVZSe3eGIHtrCZhIy/H2lCOlT5LW8q2fbnSD9Pte7h+rmuoD44qaBzTaC9O/ cHmSutOfHJmblnOSDiX7dVy9beiuQ3NII3TGn5pjT0/Fdq4ppjI4WFWZJLC90wBcbwVk furroyIBxDkVs5lB+8GLxnLRuJUtq3oX+9ul0sZeh4KwZDBXjtOrTcUPtbWEta11KTXI 4ZNj0BUBtmUwxU7Mq0wRvaf5g/tlSzd4iMmRmLrM/bWd33e4kxiehqmqn09u12bApXqE hmTZ1ZMIfNDTlxWBDpf3NYXxO5iceG6Qm3qjVpMvkJJAQiPqanhMcn+x3nCjpx7OJcS1 5Q6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155389; x=1776760189; 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=8b4xtkIhhKFmSZ8qyvLhxx+v9owHMfnrKqDv6T+JeSY=; b=Cv9XhguNJ2/oSnstqWsdhV0xNdQyQH5wYVKmsSGf22KWgxbluUTwclJwnbONCKxijL hUxIAxOsiKs+axIgsD9aSgQDqN2KyrsRB7YQeNsC7iZq6/zNYyisoCuF7rTruFwzshn8 JbHZ2LwA5zyZSYdGN6lvpVYBjoQ41Hb32Zb+suM5zoZuEZYlOIctTNJbtCZ3rAqFeMcA HZ7k18DoVL8AiUlRM3LBmFEeB36A0UF634+k8vZLcikCfMcLuuAw3upWdhh9GTr7SXso JRBiNh0qs9c7Sbbcc9LDErdWlkicQvmf+nkdSXPOF9v7MyTlaK4Q8YGyU2OT7xMVwUBo 2wwQ== X-Gm-Message-State: AOJu0Yxv0lQzvTkyf8yuHxKnY8Gh2PJMsdQvZUas9NCuRgVUk4FRysQq tQJs658gy7BjWfXD3RMpEt+wTKZs9wbmyg6R9ITLJcDBCDg11TW3LJH6jEHfLZAyjZaGoPlNL4S Xty8GfPBt+zmvYccekT/7ptFu1A9jnjgCgRPYGfK4+xIfWv02T/TtfPxh5b/SD9/ko2YScmX0sF 0NHgLKyxkG1yZ7J/vy+mHNUnhQNN4ti2T46+sm96k= X-Gm-Gg: AeBDietzcrzOtit8Po3d1Rc2S81jvXPi73opgoEcbip45I4ZHLpIKVuBl2yNrqny6N3 5ZVEbYUQicRU2gk18nL/Wi9j0Ar5NngnD5KsJGRjb8wIuYej4ck9+UMfrBeB2y/yMOHHnA3UXtp tr8w1ZRI0O4nXmElec6vTsPo2pWsA2VCRE3puYkQ+xOKuMVVonxzeKnNDMDVS+i0pY1SybPV+5h ox3oCajf65I7PPdxxYoBSYHwjOev+ey9pxQx32buCSAM4UBiPy4GzVzL3bCSIfOUuA1IVlLG/Oi /QEEKUxAsWg9IML4gpIW70lLdVsjRV17cschm/HJ2U/bZQ8XjSvIcyGdwh86HaERctpxXEfNChf fs3jxBwGPctDDBEnnFtShpO9dvtlusXkMMMZIUQ8p8DhOYgYKPhz0QqdY8DNoidg= X-Received: by 2002:a17:902:be03:b0:2b2:71b4:a3cf with SMTP id d9443c01a7336-2b2d59d398emr130703135ad.19.1776155389072; Tue, 14 Apr 2026 01:29:49 -0700 (PDT) X-Received: by 2002:a17:902:be03:b0:2b2:71b4:a3cf with SMTP id d9443c01a7336-2b2d59d398emr130702705ad.19.1776155388490; Tue, 14 Apr 2026 01:29:48 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 01/10] hw/tpm: Add TPM CRB chunking fields Date: Tue, 14 Apr 2026 13:59:06 +0530 Message-ID: <20260414082915.112122-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155448759158500 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_Pub.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- 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..6eece21397 100644 --- a/include/hw/acpi/tpm.h +++ b/include/hw/acpi/tpm.h @@ -149,7 +149,7 @@ REG32(CRB_INTF_ID, 0x30) FIELD(CRB_INTF_ID, InterfaceVersion, 4, 4) FIELD(CRB_INTF_ID, CapLocality, 8, 1) FIELD(CRB_INTF_ID, CapCRBIdleBypass, 9, 1) - FIELD(CRB_INTF_ID, Reserved1, 10, 1) + FIELD(CRB_INTF_ID, CapCRBChunk, 10, 1) FIELD(CRB_INTF_ID, CapDataXferSizeSupport, 11, 2) FIELD(CRB_INTF_ID, CapFIFO, 13, 1) FIELD(CRB_INTF_ID, CapCRB, 14, 1) @@ -168,6 +168,9 @@ REG32(CRB_CTRL_STS, 0x44) FIELD(CRB_CTRL_STS, tpmIdle, 1, 1) REG32(CRB_CTRL_CANCEL, 0x48) REG32(CRB_CTRL_START, 0x4C) + FIELD(CRB_CTRL_START, Start, 0, 1) + FIELD(CRB_CTRL_START, crbRspRetry, 1, 1) + FIELD(CRB_CTRL_START, nextChunk, 2, 1) REG32(CRB_INT_ENABLED, 0x50) REG32(CRB_INT_STS, 0x54) REG32(CRB_CTRL_CMD_SIZE, 0x58) --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155434; cv=none; d=zohomail.com; s=zohoarc; b=oCz8/ZgRX9RxnX6g6dBS7yF80/Mo9/vmrVoX+ioKAGVoJYnP1ecUowmDmJ8l9+edgHdPMPKtjWEAm3+NnQtcPMvNsH6UZ37WV1f8GWimQJGQwHKwyOB45HCRC58IgJ4WMGJrswzHZ7SgtOuumnGoEiph1IuL4zqX5Q+Tkjy+gTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155434; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jTAqWnAdiH3HJati0mXuI/rgGigN90zxb/bv+x0XDUw=; b=J7fx/Xz90yU8gyTzpef1DdJxrKT9MzLYaWGSChIGhwZsA4pzCsVcLwS+Q7vPUVmmyGKIXws3Et0hVnTkLRgWeGHX2ku3sEhX1zxwSF6/O3Z7V5+irPkGdE0Gsk9lTlfKKpj1K6IpU3Yy+ew0WnJcN5ZQo7E8k497FOkRkjIfBjA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155434099429.22365728413547; Tue, 14 Apr 2026 01:30:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZ9z-0007dd-Ni; Tue, 14 Apr 2026 04:30:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZ9y-0007cy-Et for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:14 -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 1wCZ9w-0003ys-Si for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:14 -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-203-nuQv22ExMtKixMwh7636vA-1; Tue, 14 Apr 2026 04:30:05 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b2e6ee9444so26853955ad.1 for ; Tue, 14 Apr 2026 01:30:05 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.29.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155411; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jTAqWnAdiH3HJati0mXuI/rgGigN90zxb/bv+x0XDUw=; b=HfX8Zfuh4exGqs8HVcN6NDBS6qnNEdlvezIgXG87tSi64lrrukkcbIVI2gTdX+RWOt+5z6 LmdBfILfhxn9tiCe/xYiXR3XG/OD4iCvjcbRB8Gye4uu4FEcN43x1CnV0Zjysj7O0AUdx0 MObFDuYNP8ZgBBwBUNiBQR1PkDvqdVU= X-MC-Unique: nuQv22ExMtKixMwh7636vA-1 X-Mimecast-MFC-AGG-ID: nuQv22ExMtKixMwh7636vA_1776155404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155404; x=1776760204; 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=jTAqWnAdiH3HJati0mXuI/rgGigN90zxb/bv+x0XDUw=; b=R6QxZsMbfjiofFHkjZ9RCejf7YcrT2yGhMFjYgYilqJs2STOfbCSg/JctEeMw2tR9h NGlg+6gLXIkGOFwgzkL4oAP3YafnuMkxtrjip6H/D95XryN2UsdjZfjnwH3x4xHhYl4r C+yXksYC9q4ulaC6aRHTe9JCXbwaajkHZ6TGsQCSTjW1LcLbqG4n6+0j5xYScPaZtJOR d71nBvuWoyx+K6FPdRDS/PkZwoGdxyzkV/KiGSRdTp2KjmDE/RoSkBnmrYnZ0nPiszkR g3MSmV/ddaexbSipicz9lIeLnBPNDHMkNigWqW9nQgVYhN1ARQEkWGFUJCj10d4BTp6T gw3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155404; x=1776760204; 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=jTAqWnAdiH3HJati0mXuI/rgGigN90zxb/bv+x0XDUw=; b=a9ol1bjUGFWUySL0v4FWLcxZ2wu/qBcpiD5onytC662u3XLgZ18ICbktKLkDng4gxi W9uJFnVY8sfM8/+Kr6EabdI85cNgKLTQBaqEoZEOIO6SBdz+KPBj/RP7Lf5CY8vJgzPh wPdEnMXoXb4/qyvpjsWpGMtoo5nd3Op5tFpZOtp4BEuVwb87CYh470WphMM86/+AayTI h089f78KyKtqeOJxz2HtwJc/HRh1DPN+u5WfAFDg2eQCcUuHkbHJpV2vzqjyqXhl1xgo MbjpYvO3z6X3ww993ZpdsJwf4fpRxii2H0rXfYujr9FhGAX4tcb/f4yOib8zl1+PoGzD fY/Q== X-Gm-Message-State: AOJu0YxnF44hY4Qg0EGB+jmlBW6AkPN4QcuUmoBZ2Jf0DmKh/wwatCdU vC1s5XarYn2INVu9NlVtztmNd5aJwtHb/+fnnHz6cMp+Tg5WwD5WGmOfKOR50l0532Oy/ekBXqv C1iWkgN5tbD831zfU+au68GtHnR/8QfBUxC45fSjl8IdlnugbZUGAawO5bkJU8FXS/qymm+k3OI XtEKVPoQZR/aIoac/wKZZC1g87lBKueuZazq0ob/c= X-Gm-Gg: AeBDieu7l5JnuoDDJiw5J25pHZcq8KBhTe4msVEHp/1M5oIeWZ8+08ep/5UPoeTPQWD Ab0I/Py9GFs9sNZgHLo90sQ6ETBW219Ix2f65hJhF6yuueSX36do+oQxSDuxy05pNGrPQlqwvU1 jcmhxNsUSx5sTkrUkS22JLncQLIZUyVh6F17P07Scveu0SPtH3PBlytqhymtO2Wfl6/nWa5/n5V VvGr44dI/LM1foAZ3RMyb/l76B0OFahl/a/kqU9Zuv5I/SDMSZ825l3sdaeejeW9V1FuYfB5N08 vYLS5Bs4HYrgulbx4iJuMfUnezKm1r23xiKZKPfwhbR5C8t8iM/91wJVKYdTYqHvyxfyuFjOPHT KM30auw4AsO/VYQJGiUzcEqy2TLbMwM9uJoEDUmQbRYb8b1n0/wSBYcTrpe9FKGY= X-Received: by 2002:a17:902:ce09:b0:2b4:6529:7b9e with SMTP id d9443c01a7336-2b465297fc7mr46253795ad.12.1776155403808; Tue, 14 Apr 2026 01:30:03 -0700 (PDT) X-Received: by 2002:a17:902:ce09:b0:2b4:6529:7b9e with SMTP id d9443c01a7336-2b465297fc7mr46253245ad.12.1776155403282; Tue, 14 Apr 2026 01:30:03 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 02/10] hw/tpm: Refactor CRB_CTRL_START register access Date: Tue, 14 Apr 2026 13:59:07 +0530 Message-ID: <20260414082915.112122-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155434615158500 From: Arun Menon Replace manual bitwise operations with ARRAY_FIELD_DP32 macros No functional changes. Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/tpm/tpm_crb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 0a1c7ecdc6..8e6ec44711 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, Start, 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, Start, 0); if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155450; cv=none; d=zohomail.com; s=zohoarc; b=mmoFPXsQAwaHADV98zk697Fqcfu7n2Pe5faR5zH36sZzKOekL1w/+hk9R6tep5yfxtEn4XxVuMM4w3UlRcUCoEFC06sjPD+pfeMBQHEm6c2MWcVT29LY/q2h8DRvPGRW3BdTCdyYWBM0lrlxgJyiYgOCMCljBL+WZT5zWThz6FE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155450; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6ZlI7ZJ5l97a8qYb33N5MiMsq0vmJ/gwOXd4mdNCCoE=; b=LGHcJqa7gKeGj3kJgkmnebLpA441oD5y4zXm/0vKByzhol8LF2gumJoSgnHiqThQbnMjAXYWy+3dncXsTMJYrkIDKFr8ZbnpU5SuKlrKx7rodHZwq9RFPaI691ZfFTXhYqzhfymXMnO0WUuxxl9sJPt4t29HzQyv5MH4q31Y0IY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155450926504.47187236977356; Tue, 14 Apr 2026 01:30:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAJ-0007hK-9P; Tue, 14 Apr 2026 04:30:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZA7-0007fX-12 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:24 -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 1wCZA5-00040N-06 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:22 -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-149-WWBfrX90OgmJr2P4ANiTgg-1; Tue, 14 Apr 2026 04:30:18 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b24a00d12cso55058305ad.1 for ; Tue, 14 Apr 2026 01:30:18 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155420; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6ZlI7ZJ5l97a8qYb33N5MiMsq0vmJ/gwOXd4mdNCCoE=; b=KP8QBFHcBkgAg+lpGHh6Z61g+kLx6mWUdr0c1W9nQ21Xq4w3a68Jj9ZMRSFprU8H58+fFK R3C1XOd6w4yGZSpcwttO4gXyv0WlsnB3Fpaq+UWweV0JcxyKZdd+K8/dfHdCm6prfoc2Ye Xbw6RyZO+TKbbsFdtXK3qMoGLBq+8k8= X-MC-Unique: WWBfrX90OgmJr2P4ANiTgg-1 X-Mimecast-MFC-AGG-ID: WWBfrX90OgmJr2P4ANiTgg_1776155418 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155417; x=1776760217; 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=6ZlI7ZJ5l97a8qYb33N5MiMsq0vmJ/gwOXd4mdNCCoE=; b=V91NdXNDxNtXqmkjJF+/EWLblz8ubYO28zlaTjb4+IXBoovO36h4te5L9DHnluPOZT sEii/26FBCtT8izVYM7GsWpunH1tmC1l/uv+ABZ/4ynMK6ZePqec+rrcWNeXvoLxTb77 t4RPE1IACpX5mrVXTIhU2AcWsYmDPgDTXmN+Z7ur2PFv+AwkHPIb+PqlJ/T312xEZQ9O ocJwxx7tudhZ70t9rX5V9tK6m7xTKTVW1L8McXR0E19WRKiQPe3c/O0Q3yp6rFtkzsEN GjnjE92FIsNA3dbbYQcISTbl6qI3SP8Maw0+wQ6FIN7j62u5yAitFmdkw6a1T3Jl46qA hdlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155417; x=1776760217; 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=6ZlI7ZJ5l97a8qYb33N5MiMsq0vmJ/gwOXd4mdNCCoE=; b=fh5Q0Xpt3Pn8kVPCZGE76y3cLGYzW8pdg8TF5I1+RWibDgHeSu3rfpW6UOhAw77xeX OluRUcJodKyAp4UmN8+ZLzM3441DgAWdCtX3lthMsHGbrxg2EciOE6n2wntNujGwxzMQ d7sIMHhk1xTVVzF/CGAlkJeLo8eaX/jUUXOcFhPXtP9VK5GvG/FG3801jC1mpPdG6GDC MJ0mWW3rFAwtl5SNNaArl2nt1z0kzcs9rKEmoIBzN5WAXPiY6quriXiQ8ZHq7OhZZ34R ZoYceL415WLKO/+oq1agpdzIm+7o6h9kNgOE/fNhyGKyjnKp/xAYkS3d6DBkGCFdBUGA UBeg== X-Gm-Message-State: AOJu0Yz6swUb9+k3t0DY1KmSxTHkwzc1FEUbhkTnIRKsilkCkF/nr6Mw R3e/feDUllRMJlksSXFSpjolKHA0cZSzNb2UN/ydNjLh2Lsv64oF+xPVWNjjsySNSfQ5GXw799M aiPj43Y9sPaXdcC/S03qlRzCwjWBRikznQZRDZE7Vzgwv44vnPY92VtwXW7TNk1MXPAX0Zo+qP6 Da3XtW4x+SHkiWMSmA8lqpQ7LwT/KNzFqGBgkurrQ= X-Gm-Gg: AeBDiesLknAkreOEvDu92UHgp1j5HQ1qIFy++H/Tof2ntCZlE4mwXiRKdjIyl6t5PeU G+A802z7Y6PpfY3n6Rq+4f7Go22rrWJDmoD94fdNpKlY8DlaMJJ1xRdNM1WQff3CTRdzHdAR82b pWQq5YPXhueH9Indpq+j/LNS+XE6oVF5/CdHr2ysfqn0hAtm3kuHnsTHRWZeb3s7K2hdtWRTIsC 2i1H/J7jwUYQligVbabNQDpfZvNUlsbaqkdisIMxi7hbUsij6CPOGbm580PF2h3vJ8aZEIBTipQ UPP6F9y14yZU0is9FdpydfnXoKQMAWU2+R98bNe8fF7t8BwmcAbv3DToJ7bCMptt8xcr00Axro6 JTbCQqACyHb4xs/HrQyxIfoh6DWFRJosXXblCQQ203xvgJ83b9/prd+1wmM3WfHI= X-Received: by 2002:a17:903:289:b0:2b4:5e65:5d0e with SMTP id d9443c01a7336-2b45e655efamr77399095ad.10.1776155417493; Tue, 14 Apr 2026 01:30:17 -0700 (PDT) X-Received: by 2002:a17:903:289:b0:2b4:5e65:5d0e with SMTP id d9443c01a7336-2b45e655efamr77394665ad.10.1776155411684; Tue, 14 Apr 2026 01:30:11 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon Subject: [PATCH v4 03/10] hw/tpm: Add internal buffer state for chunking Date: Tue, 14 Apr 2026 13:59:08 +0530 Message-ID: <20260414082915.112122-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155452764158500 From: Arun Menon - Introduce GByteArray buffers to hold the command request and response data during chunked TPM CRB transactions. - Add helper function to clean them. Signed-off-by: Arun Menon Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/tpm/tpm_crb.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 8e6ec44711..89f4113c97 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,21 @@ static void tpm_crb_realize(DeviceState *dev, Error *= *errp) } } =20 +static void tpm_crb_unrealize(DeviceState *dev) +{ + CRBState *s =3D CRB(dev); + + g_clear_pointer(&s->command_buffer, g_byte_array_unref); + g_clear_pointer(&s->response_buffer, g_byte_array_unref); +} + static void tpm_crb_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); TPMIfClass *tc =3D TPM_IF_CLASS(klass); =20 dc->realize =3D tpm_crb_realize; + dc->unrealize =3D tpm_crb_unrealize; device_class_set_props(dc, tpm_crb_properties); dc->vmsd =3D &vmstate_tpm_crb; dc->user_creatable =3D true; --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155472; cv=none; d=zohomail.com; s=zohoarc; b=WyQHtaVwQkM2XjqgfWDdmTXb93ctPP/IrRjqkmC82gcw6YqkEvpNxw5z642NpwznzLIU9PwBcLqpgyRsFX44upe0QERoam8EumST3pTX4eaYcBWgOsyrOmJaNvDotFtmJjrNpIV4jcp0OpSZ4E+Av3HFNajXKNKVZ9M5SKVDrPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155472; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xpbBbhOpuMpzMKWgeSYhpLR/8YmBRgwcrmEXEjLXuBM=; b=TrHR/N0EUkPzyyPdHJBZev++nI3uu8KlQgdgNU+6tDaUj1dN4LWWip8MaIWAGUwPeXKFnUQX2sEacYsAzV36T/meiIWcf+1Jdy1rPOayhRz/3lDiPulgJvP/nRkQ304/R+7GYkNqAVDyjEMuaTc1ZQ/FhC4R2/OExkxQuzGT0zM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155472659656.7078220999078; Tue, 14 Apr 2026 01:31:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAk-0008FP-5X; Tue, 14 Apr 2026 04:31:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAE-0007hO-Mw for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:31 -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 1wCZAB-00041U-Q8 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:30 -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-660-wRKKFxHzM3qJ-EXeHW1OLQ-1; Tue, 14 Apr 2026 04:30:25 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b2e8ff14e5so19804945ad.3 for ; Tue, 14 Apr 2026 01:30:24 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155426; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xpbBbhOpuMpzMKWgeSYhpLR/8YmBRgwcrmEXEjLXuBM=; b=bEVZZXuByIBATxTqG5ODP3dIwsgKXggfy92cI/VbHPD1as6zqTCnA1NfJ8DGrEGL9ivifn cNpvD6APfdXO/Ikc+x7gNgbKIfmo/m37F3p/C3l/+2HvMidv7OFUg1TG8bdGd1bETTf+dm 60fmVXRmkYYLNMS8wG4ghJkNzG5wAJM= X-MC-Unique: wRKKFxHzM3qJ-EXeHW1OLQ-1 X-Mimecast-MFC-AGG-ID: wRKKFxHzM3qJ-EXeHW1OLQ_1776155424 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155424; x=1776760224; 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=xpbBbhOpuMpzMKWgeSYhpLR/8YmBRgwcrmEXEjLXuBM=; b=r6VOOFwVwnrs65W8tNJZqBO93NnJHZ02l3XV3QsYST0Fhk5aVy8M2HiqQK0a1NiRYI 1NR9PSw7uFH4wdWJMUR9qlskSgVm+Bmn8I1AGfGizFUp6fVEEsfHoG0TIGp3T9Q9WmzE MwlJcQr1YS4EWcbF/cnf4fR3aUGCwEy5uPIHzZalurIwCn3Q8Rc/HbrMUqU14/7dR46m XCjMFitPAnVy3mBon5fSX4SX35b2rS83MhOq1SSeR69fYcpCZNDXLJgSJks0/QkJqHXl PcACfYnRuVnSWFlfyHozB1YJXntfzzrWncp268dAnXPI4KeXggtTXz4CaG44WS9utw5d HR3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155424; x=1776760224; 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=xpbBbhOpuMpzMKWgeSYhpLR/8YmBRgwcrmEXEjLXuBM=; b=WOCNACqTwhgLOicQGPSvbKX3veucHm0enQGoo6MMdWEu39UWt+M3FDIMgWqNhc9ZlN N69fKfvpKyTPacpH3AzDNlywPFj4jB22vQv0zAbVi9k9jQCbivFxs7ktQFF+XzRzgko/ 3aVdx2iAOkRLrRmzVemtHuLtf4/2llRCU5wiYmwNYKxoNnTwHBtNPFcoqdDeRUh2ZJHr O6mrFvGvKHxp9lA3s6L1mYd+7F+quI6IG/N8ZSEtNKG2p1DQ59oF+tlAayJXd0/uJd4a PMzFDjkvsWsdJd+N+ZuYA0K443Vk/VOKs/mhr21VIgChABl3LrYEb86C4XypatmLqapP ESJg== X-Gm-Message-State: AOJu0Ywi6N3G2cSA046rn8XrCDYcAgsmg/T8R2x1VurWgv9MDxIGasCw wRK4e8+Lmz5OwdIVPbUchb/p3vCALlJqBffJVBeTOx12hS8waEeH1b6fyE14o+IkzR7bxvFlsD5 J7TxH3iAppOBbuKX50cfaOXRnXSsByPaB4tyddzC+uYnYcMb/ZuLxKz3lWoqqtwX5z+npRv1Czk Vlt1mnDhbzRyU0eygNpKUXxkvj11LWQZB1/7F7ArM= X-Gm-Gg: AeBDieu5npuMmh7f6WZLhc8dCZ7wIaahBJNqMCV30SYrXgjKicNzWq46gJMyAt8jMHx eOt6ieqWaxMhjgMr/E51UWgosYUzcFuh1TATSfTCnjgR31V85vI2DkYJaw+2O5weUnUBcFuwQBC kyPMstbgG5gwsMou+e5NKyr8lFjKMxGoFutXwBLYoI5lgeO5lw2IiJ3W4iPbPTrSkMsJSOTVC/k kdi5uzHX1s7w5inZXpMYhOR3aqdDosB2dEMmFz09FZa0WeWXsDQCzPI8BkDr/UEN9zjoPFaJ/WJ fGIdZ2mWGnXFSZoHjVgwdyqiFhEUxSjQrpJUv2heqw1UyNht2vN3i45sziSPuslR0DFCa0aFoLX 0Bw/LvVcxjfJIGuGwW3/K0UyiVqIXIO8z6gUy41RPrzVzMsFzsjux5aFVvBBgkRw= X-Received: by 2002:a17:902:fc8d:b0:2b4:689a:e411 with SMTP id d9443c01a7336-2b4689ae7a0mr31324615ad.22.1776155423593; Tue, 14 Apr 2026 01:30:23 -0700 (PDT) X-Received: by 2002:a17:902:fc8d:b0:2b4:689a:e411 with SMTP id d9443c01a7336-2b4689ae7a0mr31322475ad.22.1776155420813; Tue, 14 Apr 2026 01:30:20 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 04/10] hw/tpm: Implement TPM CRB chunking logic Date: Tue, 14 Apr 2026 13:59:09 +0530 Message-ID: <20260414082915.112122-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155474434154100 From: Arun Menon - Add logic to populate internal TPM command request and response buffers and to toggle the control registers after each operation. - The chunk size is limited to CRB_CTRL_CMD_SIZE which is (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER). This comes out as 3968 bytes (4096 - 128 or 0x1000 - 0x80), because 128 bytes are reserved for control and status registers. In other words, only 3968 bytes are available for the TPM data. - With this feature, guests can send commands larger than 3968 bytes. - Refer section 6.5.3.9 of [1] for implementation details. [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_Pub.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/tpm/tpm_crb.c | 148 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 131 insertions(+), 17 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 89f4113c97..8e44df1aed 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, Start, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + tpm_crb_clear_internal_buffers(s); + error_report("Command size %" PRIu32 " less than " + "TPM header size %" PRIu32, + total_request_size, (uint32_t)TPM_HEADER_SIZE); + return false; + } + } else { + total_request_size =3D tpm_cmd_get_size(s->command_buffer->data); + } + total_request_size =3D MIN(total_request_size, s->be_buffer_size); + + if (total_request_size > s->command_buffer->len) { + uint32_t remaining =3D total_request_size - s->command_buffer->len; + to_copy =3D MIN(remaining, CRB_CTRL_CMD_SIZE); + g_byte_array_append(s->command_buffer, (guint8 *)mem, to_copy); + } + return true; +} + +static void tpm_crb_fill_command_response(CRBState *s) +{ + /* + * Response from the tpm backend will be stored in the internal + * response_buffer. This function will serve that accumulated response + * to the linux guest in chunks by writing it back to MMIO region. + */ + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); + uint32_t remaining =3D s->response_buffer->len - s->response_offset; + uint32_t to_copy =3D MIN(CRB_CTRL_CMD_SIZE, remaining); + + memcpy(mem, s->response_buffer->data + s->response_offset, to_copy); + + if (to_copy < CRB_CTRL_CMD_SIZE) { + memset((guint8 *)mem + to_copy, 0, CRB_CTRL_CMD_SIZE - to_copy); + } + + s->response_offset +=3D to_copy; + memory_region_set_dirty(&s->cmdmem, 0, CRB_CTRL_CMD_SIZE); +} + static void tpm_crb_mmio_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { @@ -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, Start, 1); - s->cmd =3D (TPMBackendCmd) { - .in =3D mem, - .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), - .out =3D mem, - .out_len =3D s->be_buffer_size, - }; - - tpm_backend_deliver_request(s->tpmbe, &s->cmd); + if (tpm_crb_get_active_locty(s) !=3D locty) { + break; + } + if (s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { + /* + * Backend TPM is busy processing a request. + */ + break; + } + if (val & CRB_START_INVOKE) { + if (!(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE)) { + if (!tpm_crb_append_command_request(s)) { + break; + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, Start, 1); + g_byte_array_set_size(s->response_buffer, s->be_buffer_siz= e); + s->cmd =3D (TPMBackendCmd) { + .in =3D s->command_buffer->data, + .in_len =3D s->command_buffer->len, + .out =3D s->response_buffer->data, + .out_len =3D s->response_buffer->len, + }; + tpm_backend_deliver_request(s->tpmbe, &s->cmd); + } + } else if (val & CRB_START_NEXT_CHUNK) { + /* + * 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 Thu Apr 30 00:40:27 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=1776155464; cv=none; d=zohomail.com; s=zohoarc; b=OG1tU71IdPgzkHCo8chRu0yXLhKvtGTsiRJks0vcc00dJnDRWj4r3rjQxPrr4TSjMFAk+sdKqXT+5Dejee3VsBAJ1GMuudYemJPkj4+u9rteW59K/XYLDD0mat53ShrpB4OFb5J377TTI7xU8CcDGDDmItrXgU4L67ZT8B55pyE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155464; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=O27aUymMWw4r7WFiKHGsnuDY1qgTW+KsBfDAGCFAhnxL1mZW6SmcHkEv/PiLEVZ+QL2ud78Yflh4IC4Fs3JiCQHsjx70w0loLxoUpWk48rkH3cQHoopd0DlGLEMl7V/Q35uTdax2muUKvOO3Hptkd3qXPm9wHbf7jr4Aw3m/ovU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155464638646.1493977178133; Tue, 14 Apr 2026 01:31:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAi-0007vZ-S7; Tue, 14 Apr 2026 04:31:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAG-0007he-Pg for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:34 -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 1wCZAE-00041l-Or for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:32 -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-639-Gj4SlvAbPUKcRp_UFCrw5Q-1; Tue, 14 Apr 2026 04:30:28 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b2e6ee9444so26861325ad.1 for ; Tue, 14 Apr 2026 01:30:28 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155429; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=FpKjdv3jbMsHXYra6ZB0V5jIgxZvJbU0O6XVBtli7e/LNoyYytknwNKly9nYkP/AbR4yiE ozeR4T3NfIspq3bJtz31mG4793gUE61HwfAg27k01RYkLbFSYZPM2RjXUbD8DDJjCm0dtd CEUCE5kmsV+iEEOWhqi4R3GhhIVhIf4= X-MC-Unique: Gj4SlvAbPUKcRp_UFCrw5Q-1 X-Mimecast-MFC-AGG-ID: Gj4SlvAbPUKcRp_UFCrw5Q_1776155427 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155427; x=1776760227; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=MSF3v8e/uUJk3pou6/rV8+JpD5G5S3NNJQyJ34363K+/a0PPLfMNeV4a2KFDdx8Q8i Z0cJba6LKIp7vPn6rVEg2JX8sDfsjHBTt4uqC6dlFO2MnqR7ez1Iorj+tH2WSn361h4E xI1hi5LK15PVH+Ejsq/C+JQsZo4z1N4ejt4aIjqjKr6I2MuokU3JmR0BReHGt6bj+Psc xDDLuHyHYzH6rn75yItdAhInrOGF/XmGRP1rLlYbvMH/5UrHr+vEEsbIiDQMmrw3tSQp PsFI5mFbxd+FiGnr1yAXkFaBp+rIXMAfCo7Zjlx0FdJ/nBZoeQ2D9sAgPeNgW3oowIMr +GOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155427; x=1776760227; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fhbOaL4wUtt02SVejXfTrifRbFQpI240xrjMT6zWOWY=; b=hlla+KrTTlnmpbXmX5tjVJSuOL5rn7CvsfuemkIwIvL62D7d8uP88KLSPoZaS4+b/g +Pkjze9OIB6wt/ykXOWTFWyvfLsNs2n+rLpceJTZ8jh9yQUy8R1CuHRzGUjetdbiNPZY ATgsp26n/wnKFO7XjbbWe9F+B/phIphnA2uEwJyUwK90+r0LvHkHvg0zFqlbqJZNSc1B 7N/DGPOaWAdWlZNUBRhbKV/s9rLlFgXutlhlEY81DqnhzCzlHp19NUWxRUj9ocyVHtjP dGlNfs9JHzW6wJz3vvg5FkpHvcWIfoGYmsMU/ljFaEPQPOMlUmoaKGoYub1rpFYLN6BY oY9g== X-Gm-Message-State: AOJu0Yx59z+ndHci9Udttis2sMg85SszKesNL/Y3lDl0/F0l57q5pN8i FLp0GSWbm034aJIl9gzYUV7XaZlOyf1v77kPK9ai9J8Y9gDAIcYB0Yh3kUEGNgkzAbxTXmV8seH cl5WXK4DKbtQrsTrjhHZMg5P9BLsaljfXuYZKxeT8lK+4tXUzqpcwHgaOsl3xiSdfEhhQbynkEl WDphC9re+Z+s1cSBNvr+mvyAx7Rf+sQKsqc4l64VU= X-Gm-Gg: AeBDietEJ5hksTXXyCszJGcyhwy0eu8nmZmxvTG6fj2rrJQXIQxtpdKlQIMsDridslc ZFspwWyseY5UkY/7dxGwS8ebGc8KPU9agrXuS1aumwsxUja+SOkqzoE+OlS+AXhoYXDrriIHypP 9MIB+7JHkvt1dSLTeWo4Q+v+6m3GHAlG8rOMStjBhYTLxaqce6Itxqv1Ye7Scyw7C08GyLR3MFe 4aAX8j+UZSm1Zfin9zSQN5oLaLhzo3LeeQf728QqTeWj4qNFG/TlCfr6EplvIZruVtM+sG13AKV WywawJIpf/pf7RGN8jth0j0qGdy+VghEP+vbB5OGGIfbt181I8YDWp8hVTwtqdB7ezEyJDQ/Man CDkOtnooJVsBi+zr1JJqWeobt8GTi+l/RyKPE0KsfgSN8cgcQr81jbKOhvShL7Tw= X-Received: by 2002:a17:902:7b91:b0:2b0:4c68:283f with SMTP id d9443c01a7336-2b2d5c55bc6mr108648625ad.5.1776155427182; Tue, 14 Apr 2026 01:30:27 -0700 (PDT) X-Received: by 2002:a17:902:7b91:b0:2b0:4c68:283f with SMTP id d9443c01a7336-2b2d5c55bc6mr108648305ad.5.1776155426585; Tue, 14 Apr 2026 01:30:26 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon Subject: [PATCH v4 05/10] test/qtest: Add test for tpm crb chunking Date: Tue, 14 Apr 2026 13:59:10 +0530 Message-ID: <20260414082915.112122-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155466923158500 From: Arun Menon - New test case added to the swtpm test. Data is written and read from the buffer in chunks. - The chunk size is dynamically calculated by reading the CRB_CTRL_CMD_SIZE address. This can be changed manually to test. - Add a helper function tpm_wait_till_bit_clear() - Note that this commit does not yet exercise the chunked read/write logic, as current transfer sizes remain small. Testing for large transfers is introduced in a subsequent patch: 'tests: Use ML-DSA-87 operations to cause large TPM transfers with CRB' Signed-off-by: Arun Menon Reviewed-by: Marc-Andr=C3=A9 Lureau --- tests/qtest/tpm-crb-swtpm-test.c | 10 +++ tests/qtest/tpm-util.c | 110 ++++++++++++++++++++++++++----- tests/qtest/tpm-util.h | 5 ++ 3 files changed, 110 insertions(+), 15 deletions(-) diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-t= est.c index ffeb1c396b..050c7b0c1f 100644 --- a/tests/qtest/tpm-crb-swtpm-test.c +++ b/tests/qtest/tpm-crb-swtpm-test.c @@ -33,6 +33,14 @@ static void tpm_crb_swtpm_test(const void *data) "tpm-crb", NULL); } =20 +static void tpm_crb_chunk_swtpm_test(const void *data) +{ + const TestState *ts =3D data; + + tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer, + "tpm-crb", NULL); +} + static void tpm_crb_swtpm_migration_test(const void *data) { const TestState *ts =3D data; @@ -54,6 +62,8 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 qtest_add_data_func("/tpm/crb-swtpm/test", &ts, tpm_crb_swtpm_test); + qtest_add_data_func("/tpm/crb-chunk-swtpm/test", &ts, + tpm_crb_chunk_swtpm_test); qtest_add_data_func("/tpm/crb-swtpm-migration/test", &ts, tpm_crb_swtpm_migration_test); ret =3D g_test_run(); diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index 2cb2dd4796..744592763f 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -14,16 +14,44 @@ =20 #include "qemu/osdep.h" #include +#include "qemu/bswap.h" =20 #include "hw/acpi/tpm.h" #include "libqtest.h" #include "tpm-util.h" #include "qobject/qdict.h" =20 +#define CRB_ADDR_START (TPM_CRB_ADDR_BASE + A_CRB_CTRL_START) +#define CRB_ADDR_CTRL_STS (TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS) +#define CRB_ADDR_CTRL_CMD_SIZE \ + (TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_SIZE) + +#define CRB_START_INVOKE (1 << 0) +#define CRB_START_RSP_RETRY (1 << 1) +#define CRB_START_NEXT_CHUNK (1 << 2) + +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask) +{ + uint32_t sts; + uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; + + while (true) { + sts =3D qtest_readl(s, addr); + if ((sts & mask) =3D=3D 0) { + break; + } + if (g_get_monotonic_time() >=3D end_time) { + g_assert_cmphex(sts & mask, =3D=3D, 0); + break; + } + } +} + void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size) { + uint32_t tpm_sts; uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); =20 @@ -31,24 +59,76 @@ void tpm_util_crb_transfer(QTestState *s, =20 qtest_memwrite(s, caddr, req, req_size); =20 - uint32_t sts, start =3D 1; - uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; - qtest_writel(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START, start); - while (true) { - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - if ((start & 1) =3D=3D 0) { - break; + qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE); + + tpm_sts =3D qtest_readl(s, CRB_ADDR_CTRL_STS); + g_assert_cmpint(tpm_sts & 1, =3D=3D, 0); + + qtest_memread(s, raddr, rsp, rsp_size); +} + +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size) +{ + uint32_t tpm_sts; + size_t chunk_size; + + uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); + uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); + uint32_t crb_ctrl_cmd_size =3D qtest_readl(s, CRB_ADDR_CTRL_CMD_SIZE); + + chunk_size =3D crb_ctrl_cmd_size; + + qtest_writeb(s, TPM_CRB_ADDR_BASE + A_CRB_LOC_CTRL, 1); + + for (size_t i =3D 0; i < req_size; i +=3D chunk_size) { + bool last_chunk =3D false; + size_t current_chunk_size =3D chunk_size; + + if (i + chunk_size > req_size) { + last_chunk =3D true; + current_chunk_size =3D req_size - i; } - if (g_get_monotonic_time() >=3D end_time) { - break; + + qtest_memwrite(s, caddr, req + i, current_chunk_size); + + if (last_chunk) { + qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE); + } else { + qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUN= K); } - }; - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - g_assert_cmpint(start & 1, =3D=3D, 0); - sts =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS); - g_assert_cmpint(sts & 1, =3D=3D, 0); + } + tpm_sts =3D qtest_readl(s, CRB_ADDR_CTRL_STS); + g_assert_cmpint(tpm_sts & 1, =3D=3D, 0); =20 - qtest_memread(s, raddr, rsp, rsp_size); + /* + * Read response in chunks + */ + + unsigned char header[10]; + uint32_t actual_response_size =3D 0; + + qtest_memread(s, raddr, header, sizeof(header)); + actual_response_size =3D ldl_be_p(&header[2]); + + if (actual_response_size > rsp_size) { + actual_response_size =3D rsp_size; + } + + for (size_t i =3D 0; i < actual_response_size; i +=3D chunk_size) { + size_t to_read =3D i + chunk_size > actual_response_size + ? actual_response_size - i + : chunk_size; + if (i > 0) { + qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUN= K); + } + qtest_memread(s, raddr, rsp + i, to_read); + } } =20 void tpm_util_startup(QTestState *s, tx_func *tx) diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index 0cb28dd6e5..681544e7d8 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -24,10 +24,15 @@ typedef void (tx_func)(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask); void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size); + void tpm_util_startup(QTestState *s, tx_func *tx); void tpm_util_pcrextend(QTestState *s, tx_func *tx); void tpm_util_pcrread(QTestState *s, tx_func *tx, --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155483; cv=none; d=zohomail.com; s=zohoarc; b=Pyc0qZCScS8mWQbfOgJ2XET2PlulsYj9tqAQkt38wXDZlwO2uPrmvi1Ym27Uj0FeUw8J4F5mmPPS8UKG/LedQ14Z4GHoVBN4c1ifTlz63p5YgtYwYtuWkPwlnIUjgvxprydSD0E9fiwJe06VR4R2mGoXJZkFZh0A/vorehXQE1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155483; 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=bK5BWDq0pPdx/5DVBrTlll0571lkzu0A1GqTXvFV8Cc=; b=d12oiq1zUmCH4nFRbOa5eIUf7kSsaeeO5c9Oz5ioFP8hJWNHMlUvNnGC9/fkSO1hY0NfzSDJvHFc6D2AWcIeTIIul0c3rDkGBgkR0Y3qWCAwOiL58yyeqHzUevkuVOlShDjTg0ATRiRk+jhxMUrsa6tfAqFlZ5WGr3HZq7KDi/w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155483505690.6850845140243; Tue, 14 Apr 2026 01:31:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAm-000058-Kg; Tue, 14 Apr 2026 04:31:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAV-0007ve-FD for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:52 -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 1wCZAT-000433-2Z for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:46 -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-606-PwsgcEolPU6VaY6NkIQFtA-1; Tue, 14 Apr 2026 04:30:42 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b24cd2e2b3so52654505ad.0 for ; Tue, 14 Apr 2026 01:30:42 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155443; 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=bK5BWDq0pPdx/5DVBrTlll0571lkzu0A1GqTXvFV8Cc=; b=XDOobnf0Ga6QaGQF9jr3OHarEnEKTDtLqq6uwV0APQWhxtQoCUsklyfceEp+JZc8f7EouX hIyFukq+Aq2weQ2AuXu4qxrlbShx5fHGqrzktzYjE0r6Cpm1v2YAKS2piWt3kz+dPQ+4BM zKj/schQhdPwLG7sUNtIgaKHcDIIDyU= X-MC-Unique: PwsgcEolPU6VaY6NkIQFtA-1 X-Mimecast-MFC-AGG-ID: PwsgcEolPU6VaY6NkIQFtA_1776155441 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155441; x=1776760241; 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=bK5BWDq0pPdx/5DVBrTlll0571lkzu0A1GqTXvFV8Cc=; b=f0klhg5WjeXVqM+45snUmhxv7pBMuNv4g3iSrt+9JIKI5PtqZKEhFhgHTjNBwW559K +Sl1OPRQJJAUMatFTzlNRx6Zs9cfLQA6BOZyxEcq94G4JRl1Jr5Bsf7a5vLngPz1mqNd fo1EMIaoLJ8OiFQ1gaqNo8srGaNijZ5Tddmfjf0ZPKkDWMpn8ZzS9PHnxPpD0BVgOnMm DwXx1H7DNrg19cmK35kuK1AgrMZxudlO/DsiYpVbH9uKeHucoJKNAluNyg8UlyuRiL2d DBLvjBsT5so+98qwnvFvRsKMeeACL8wTsIW03VwxAws/6bSqW332OJ34cJfiTPLyRqOd xmDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155441; x=1776760241; 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=bK5BWDq0pPdx/5DVBrTlll0571lkzu0A1GqTXvFV8Cc=; b=ZXQEJzqW4O+e6Q1jQJIMUIrdv3DwHoq1GtSjqojtw/hWKRSmQpqpaLGdIpnkH6ltlg LGwPDr2gi1pRodzkQt6cYg3mxV4I/qUJ/wm+o19PIaplR/1XQpYODNFy6DNtW7SfH3yh Da3yWsgkR44BKlrEvFoio+lfqfSzno9J7OR7dQBsRn5zUY969Ie3SMpjZVLKfh2dz3oP 8C/R6LB8WQaE+8rPB46lmz/sLGYdNAKHdT0FE56mhNPl+kBd2TWKy/KI0lvceiJSSo8E LnCYPydNIJg55ZSq9NU7hXH30ScbIVyUfGx5y6TsbyI4vMw3idhHNiUuRse2SNHjryCb SAKQ== X-Gm-Message-State: AOJu0Yxd20zZK2VM+yKmiQrkzsNljnnoi66hX4re809sr+xMCDK7R3bQ GhdwD+tvm6YlA5QVLzsy+GV8QJ0vD8a+eUbwMKVjNxzH1uwy3GkQWR+KuE6oO9/vLraWhqWDiOU M2BIeHpxmYzI46h5TIzNAbfXlK3Jle41d9ODLEwMDTxxtG1agK6beELFIpgZIC8uumGlMg4Vege uAhmgNw7j8TwKNv4hOL0VQNMBGWotBoy45DlOrkGk= X-Gm-Gg: AeBDieuUPHMUvuKw/KKqlFDhe8UDbuqrCqrGF83PYh+xYr/2zHzCwUfzg0GO8beDVF7 TVMo5PRdeG6RVmgxQx3VSjknwDpiwtl8Aqt1+8I7WjtvbUVQSwo46z7neGyo3jtUojoFLIAhzjO HSQIRhbis8xpRCjcHd81tIbl5M7GEmGEEOgGcKyn/1n9Xw94FNCB9bLod7m0OnOgzOHZVqC/GLi 8j5W2OM+8IDz2RVBYuu7KlEkXJhJ94zhkh3e+ieXiH1dHpvYtQ5TQ1ZDFq7dN0oHkBKYK7ExwS7 SnKvdMP5TCrRE6LTDZb6eghYqPZJtfeeKjWhCYL4AwAro9P/CjYT1UBTMoafum6D2LVHpmiBjYC oHbobJ5zlrOu6X2DEEybQHKqhg+Y1xTJy1NVBRQB+/Km3aiIsJfSn1YgdbuF9588= X-Received: by 2002:a17:903:3c4b:b0:2ae:ac0c:5a2a with SMTP id d9443c01a7336-2b2d59433c5mr171481865ad.6.1776155441169; Tue, 14 Apr 2026 01:30:41 -0700 (PDT) X-Received: by 2002:a17:903:3c4b:b0:2ae:ac0c:5a2a with SMTP id d9443c01a7336-2b2d59433c5mr171480035ad.6.1776155438542; Tue, 14 Apr 2026 01:30:38 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon Subject: [PATCH v4 06/10] hw/tpm: Add support for VM migration with TPM CRB chunking Date: Tue, 14 Apr 2026 13:59:11 +0530 Message-ID: <20260414082915.112122-7-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155486759154100 Content-Type: text/plain; charset="utf-8" From: Arun Menon - Add subsection in VMState for TPM CRB with the newly introduced command and response buffer GByteArrays, along with a needed callback, so that newer QEMU only sends the buffers if it is necessary. - Add hw_compat global properties for both migrate-buffers and cap-chunk because the chunking feature is only supported for machine type 11.1 and higher. - Implement a migration blocker to prevent migration of the VM if the user manually enables chunking capability but disables buffer migration. This avoids state data loss. Signed-off-by: Arun Menon --- hw/core/machine.c | 5 ++++- hw/tpm/tpm_crb.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 1abc8ae737..6d6b0fc9d1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -38,7 +38,10 @@ #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", "x-migrate-buffers", "off"}, + { "tpm-crb", "x-cap-chunk", "off"}, +}; const size_t hw_compat_11_0_len =3D G_N_ELEMENTS(hw_compat_11_0); =20 GlobalProperty hw_compat_10_2[] =3D { diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 8e44df1aed..0f1eced977 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -24,6 +24,7 @@ #include "hw/pci/pci_ids.h" #include "hw/acpi/tpm.h" #include "migration/vmstate.h" +#include "migration/blocker.h" #include "system/tpm_backend.h" #include "system/tpm_util.h" #include "system/reset.h" @@ -49,6 +50,10 @@ struct CRBState { =20 bool ppi_enabled; TPMPPI ppi; + + bool migrate_buffers; + bool cap_chunk; + Error *migration_blocker; }; typedef struct CRBState CRBState; =20 @@ -345,18 +350,48 @@ 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("x-migrate-buffers", CRBState, migrate_buffers, true), + DEFINE_PROP_BOOL("x-cap-chunk", CRBState, cap_chunk, true), }; =20 static void tpm_crb_reset(void *dev) @@ -392,7 +427,7 @@ static void tpm_crb_reset(void *dev) 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); + CapCRBChunk, s->cap_chunk ? CRB_INTF_CAP_CRB_CHUNK : = 0); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, RID, 0b0000); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID2, @@ -413,6 +448,7 @@ static void tpm_crb_reset(void *dev) static void tpm_crb_realize(DeviceState *dev, Error **errp) { CRBState *s =3D CRB(dev); + int ret; =20 if (!tpm_find()) { error_setg(errp, "at most one TPM device is permitted"); @@ -422,6 +458,16 @@ static void tpm_crb_realize(DeviceState *dev, Error **= errp) error_setg(errp, "'tpmdev' property is required"); return; } + if (s->cap_chunk && !s->migrate_buffers) { + error_setg(&s->migration_blocker, "TPM chunking is enabled but " + "buffer migration is disabled. Migration is blocked to prevent " + "data loss"); + + ret =3D migrate_add_blocker_normal(&s->migration_blocker, errp); + if (ret < 0) { + return; + } + } =20 memory_region_init_io(&s->mmio, OBJECT(s), &tpm_crb_memory_ops, s, "tpm-crb-mmio", sizeof(s->regs)); @@ -454,6 +500,11 @@ static void tpm_crb_unrealize(DeviceState *dev) =20 g_clear_pointer(&s->command_buffer, g_byte_array_unref); g_clear_pointer(&s->response_buffer, g_byte_array_unref); + + if (s->migration_blocker) { + migrate_del_blocker(&s->migration_blocker); + error_free(s->migration_blocker); + } } =20 static void tpm_crb_class_init(ObjectClass *klass, const void *data) --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155474; cv=none; d=zohomail.com; s=zohoarc; b=IZC9QeWZdcJh7EzrIzAfrQZ7TVlngiDt/hfYYpnk9yGyxVcY74C6cibLrHUBfxKbGORaeEFPBJQWO2AEggGcluWYI7AmTpF4vLboA5POgAdH/w6ro65oBL2Q2J5ymz1oALf8+Dyf1fJU3cyYx5GUeFR66oFAnA8Tp6ViuPhcVKU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155474; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=AA/+aV7GXdiSSM+fdZWgr2/bHxuDfdDqUOGuiL21XMo21NrkSnPZ5SzeEkv8wUXskEbVn7+7zuc4wn+9oA4hdpzHuLWH3VwCOYdrp0APD9vxP2JA/cxZlSyOwWpN3QN8Cg+pxC9jocgQgJaO1LKGfrx/J1O5uvL4KFaciSavOVs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155474895182.8657585467863; Tue, 14 Apr 2026 01:31:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAl-0008Od-Ad; Tue, 14 Apr 2026 04:31:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAe-00085x-8d for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:00 -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 1wCZAc-00043v-JA for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:30:55 -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-696-fDlGMK7qOEmZP4TJG5R3eA-1; Tue, 14 Apr 2026 04:30:51 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b2ed279eedso15400865ad.0 for ; Tue, 14 Apr 2026 01:30:51 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155452; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=HuJGsoTT7Z5IyqEev4BzkDzSAzlfUxfcABi1imQa4bJnNL4NQXGGet7voWMgpXwIysYSvR jc+u+xkwYS9bPf+gkCYxxQP8xOeQzuxx2lmXpbVyBx1kD87egRyNigxgNZW8JYjYCJINbJ Hfe4fgGKIZUfK5P7bCkqb9WydjFfTjE= X-MC-Unique: fDlGMK7qOEmZP4TJG5R3eA-1 X-Mimecast-MFC-AGG-ID: fDlGMK7qOEmZP4TJG5R3eA_1776155450 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155450; x=1776760250; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=Io3FcvwnSoJ3/mjO45PO+qzBI4HNz0ZmyRq/b5CeohfbbUXjQj619HakRMy7F6z7xD QAFYnEAWG4ZIC0zswBmVPQqxT+9pRSth05w73PP9nDLrX0OUX+vmrFmsMMb/xoUXkSFr y7I98RRpyEMqG2cPIwyMVWAOm1VbCMAJIvP+sGvew5z0d7TpPjWtdh3IIVPaPSSzHWAM pQ37uqsm9GTx25jetsLAYVwtiBNcAEFggYEqAlG8UFeqfiFEIsO/rXhtAvmn4d+h6ie3 lpHjkyUYDDjHc3QfGhDodBKFXgaikn/Iw9sQDIgSl7OhmbKM0xs5OuYqCrk2uIHEbKIy 5zQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155450; x=1776760250; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ClfWz/hTXQx5IWEI8DJH2vTF1tKQTfAQCoPQ/9w7nI8=; b=Je9oMwmVjphBs4KqYOFlpNqHHwwtiAoWOu/OhIMNTNJJAihAyreCLalNUFj0O1TFTk cu3DnsqNb7LcszTmsd8fzvpjI/7QrjFVokqCaqECw1VEQhsEL7qbb78tB3J435Bg/4yk +OQ1Zo3qQds1ePepdbFBGY6t+z2iv5FzGl2+5J+tC5YtWFnLV4XIahz9nb7gGXfnHyth vpvN+i5nIu4Kb7RZeem02cD/+IPnF+3dJJdrpezpkryuRvxcnFzEoTbXtkbupw6ZLqts w5hJAeg7uFf9HmoJzJA8TRn0Nr+Cs9SOmfxCkbUo38QNZZWR1JIgWl3b4nsAHGFTltM4 vMYQ== X-Gm-Message-State: AOJu0YxvMtosrloooUpVJ/hrnSbvqe8nvzoWwkmQ7byxZxoCJNQQbyqX W3fiFyOCaQKk/qg6CWuU6XPbjLZT3rq3ccdZNoaAsTv2BV9kF5fjeAqx3K1OQ0SXDGSBxksW1dX WI4QzpwnaywGZI/IUVr9xXqBcEBMM/xZf7blrAbH2ZZBs4AC95n7iwbfaAVgz7xMRdwxlNh9kN+ s1jBlJ+7eHRU/WYuAlNM/5H9aY0OLeB1r2yrS3Unc= X-Gm-Gg: AeBDieu9N2jGiX6uVdtGoEEvmizlajNqUGyHX4i7+mIZpmhz/Tlx+xRr0uRpfkJyKJ/ 5MDhJ9vrOHzREXu82QWOI0pt+bav4ueBocybNQa+rtGub2pubEaPqC3eNj1hUAZKT+WhvrM90NT iUoSkC8MbC2LWY50H+BzRpZCZiLmtf2MKzs+F2e1yjFMmgbUqmYVT+X8oTizLNNTUb8oLdZwCFd JFsoo9YoRP22bFtsMPNcTdfg2HPSeqKVlM5xQTFhCmUpF0QAYRVtPzg4W8BkNbTcR4MH6yne2AK C7oedmnUuslODCcxjhafgJ065Nl5CmTvKBZzBQ0E46JcQUi2b9kpMR+iB4XdwZ4Mf1sGzDEqYoS PJDF7jLDPWxjz9nA5V/QfyaY+VVrGKRpB6G/LX8YHlj4s3boCSuDbGvdXXb04tas= X-Received: by 2002:a17:902:724b:b0:2b0:5795:9ead with SMTP id d9443c01a7336-2b2d57d9aa2mr109672655ad.0.1776155449948; Tue, 14 Apr 2026 01:30:49 -0700 (PDT) X-Received: by 2002:a17:902:724b:b0:2b0:5795:9ead with SMTP id d9443c01a7336-2b2d57d9aa2mr109672215ad.0.1776155449320; Tue, 14 Apr 2026 01:30:49 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 07/10] qtests: Enable starting swtpm with a given profile Date: Tue, 14 Apr 2026 13:59:12 +0530 Message-ID: <20260414082915.112122-8-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155476362154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger Enable swtpm to start with a given profile by passing it to swtpm on the command line using --profile name=3D Remove any existing TPM 2 state file since applying a new profile to existing state would be refused by swtpm. Signed-off-by: Stefan Berger Signed-off-by: Arun Menon --- tests/qtest/tpm-tests.c | 6 +++--- tests/qtest/tpm-util.c | 9 ++++++++- tests/qtest/tpm-util.h | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/qtest/tpm-tests.c b/tests/qtest/tpm-tests.c index 197714f8d9..f71d882990 100644 --- a/tests/qtest/tpm-tests.c +++ b/tests/qtest/tpm-tests.c @@ -43,7 +43,7 @@ void tpm_test_swtpm_test(const char *src_tpm_path, tx_fun= c *tx, return; } =20 - succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, &error); + succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, NULL, &= error); g_assert_true(succ); =20 args =3D g_strdup_printf( @@ -91,11 +91,11 @@ void tpm_test_swtpm_migration_test(const char *src_tpm_= path, } =20 succ =3D tpm_util_swtpm_start(src_tpm_path, &src_tpm_pid, - &src_tpm_addr, &error); + &src_tpm_addr, NULL, &error); g_assert_true(succ); =20 succ =3D tpm_util_swtpm_start(dst_tpm_path, &dst_tpm_pid, - &dst_tpm_addr, &error); + &dst_tpm_addr, NULL, &error); g_assert_true(succ); =20 tpm_util_migration_start_qemu(&src_qemu, &dst_qemu, diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index 744592763f..cbba5b1c1f 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -212,7 +212,8 @@ bool tpm_util_swtpm_has_tpm2(void) } =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, - SocketAddress **addr, GError **error) + SocketAddress **addr, const char *profilenam= e, + GError **error) { char *swtpm_argv_tpmstate =3D g_strdup_printf("dir=3D%s", path); char *swtpm_argv_ctrl =3D g_strdup_printf("type=3Dunixio,path=3D%s/soc= k", @@ -222,11 +223,17 @@ gboolean tpm_util_swtpm_start(const char *path, GPid = *pid, g_strdup("--tpmstate"), swtpm_argv_tpmstate, g_strdup("--ctrl"), swtpm_argv_ctrl, g_strdup("--tpm2"), + profilename ? g_strdup("--profile") : NULL, + profilename ? g_strdup_printf("name=3D%s", profilename) : NULL, NULL }; + g_autofree char *swtpm_state_file; gboolean succ; unsigned i; =20 + swtpm_state_file =3D g_strdup_printf("%s/tpm2-00.permall", path); + g_unlink(swtpm_state_file); + *addr =3D g_new0(SocketAddress, 1); (*addr)->type =3D SOCKET_ADDRESS_TYPE_UNIX; (*addr)->u.q_unix.path =3D g_build_filename(path, "sock", NULL); diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index 681544e7d8..ca2d7d173f 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -41,7 +41,8 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx, bool tpm_util_swtpm_has_tpm2(void); =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, - SocketAddress **addr, GError **error); + SocketAddress **addr, const char *profilenam= e, + GError **error); void tpm_util_swtpm_kill(GPid pid); =20 void tpm_util_migrate(QTestState *who, const char *uri); --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155481; cv=none; d=zohomail.com; s=zohoarc; b=cM/pfT5O6aLB+DWzvOKX7jRniEWJyoH+aP6xuDzV192vcOL2kthNE5p20L6pCGEPn8wJBsuvoTu0HAzjIpjXSI/6v4DVsXhbTIvSwqAg5bAhOGU65PAUxQ7IKlt+oD7SX0RRRxoI2hv4/y1vw5yw64P5aMJoa4m9VDIV3IYx3no= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155481; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=IJQs6BZqrvgFiS3eoZjjxRw/09MYyTDi9oQfVccRPtpvx9S0spVvYN4SNSIfgp/VNCBEtNPKRAxSm3ILEOj5Wh0EG8CT8tVkByTqNZF4fkQaRM1RRwVP/98NcbmnrgFPRy/w5pb+3ZHDrftOAMxC1hBa5yx7UiZUmCpokhUOcnU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155481429484.3470940445641; Tue, 14 Apr 2026 01:31:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAo-0000L9-Si; Tue, 14 Apr 2026 04:31:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAn-00009x-A6 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:05 -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 1wCZAl-00044d-6w for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:05 -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-364-5Hh7u_oIP-GHt96bglKHOA-1; Tue, 14 Apr 2026 04:31:01 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b24308165dso99849315ad.1 for ; Tue, 14 Apr 2026 01:31:00 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:30:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155462; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=S0GVeBRfKHx7IqVq1hOMLlCCtNfPcj9AkDmhuMRSV3Jzh7obz1kg+y/osNdmXkz9LizxXX eTruRlhFx6wNn0bEyhXf0yjp4GMOvxK9tb41C4B5aS1qLnozg8s+Wjinln5RQGVPAlEeD0 RdVdFXGT4wXvt+dGdn6A8+13MAuNGWw= X-MC-Unique: 5Hh7u_oIP-GHt96bglKHOA-1 X-Mimecast-MFC-AGG-ID: 5Hh7u_oIP-GHt96bglKHOA_1776155460 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155460; x=1776760260; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=arLMS+y/363snBFIknmoLXSPYI8pSJeZTRWx66Id+RVg20CPjPjxo9Wq0Haosp7zAC DUKyoH+3zQEPJa0T8ONk7ApU8zDDsXa6x7a4AN2xWLpAfPKC4WVwc2JbVcroGdJDpFV2 mB6JXI20STkkqgCnTi9rdmBwgiHX6NqL4EoF0egZ7utIXiogS33UEAo9QrnUoSreDV7W HEph4vEvjFHxGZAc24+fwzj1ODI0GM1UhPe6IP5bJd/f3Vv8328rFFF2pkYRfPamLQvM /ZTPbMdm7N7CGGVaBGBNoGgNtkjd2BHQ6xvyHkWXIKpRwiFSXUIYbWINOzfG6c2zijKW Yn5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155460; x=1776760260; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oB2qQatP86NDHo/fOW4g+asa3pzyhpj3nK6Gfp6npWc=; b=RVc/03D8qwpw5uR5ruFC9u7EoqVdC0q5WFs6eYOjMDSxrqWr6pwdbl1bL2rGv8CRBh tA/vlreEgz9IpLNSPt/zJNF38omzq8T9zmUyq0oGeWqXGMgqC1PI6Rd0I4X6LP8737UJ VirCjogcb/UZatrf6VqRvVIQlELL/RboH3bTtqd3+ZsDTiLmcj9ZnusZW8kh+wopFLBI oImwacfZ7epJRheWUBiuMlVJsX/6TCJux/q26UPWkghwBVwkMn+VqkurHzWWnV7swrI0 oyFlgpFO5v7EBECEG/x3pM4UnVbHIECe2vIJN5nTD87lx71PFRIJTlJJUdAxbdVy7V9W YlkA== X-Gm-Message-State: AOJu0Yxpf+BP0aBQhVeLYvggJkDlr+H4UZbjgdffa3K2bDmnMOcIg029 ff/JYsu/PIwrF+HQIjJDwPaKpe6kXK2Q6owuhGz9Sx8zM5QKCG/91Vr+sLpPjC4TIjdhu+SvG7U +bF+hZZCMGDKwdPJYWDwH27mq3cfJukz2v4H3FtOmlKqtyG8qgfhNO7md0I2yX5HHRgrmk8VGyQ 6E8l1eAagswzaoAAqhwJy1mwPwk2AOGXJBjip+KzU= X-Gm-Gg: AeBDietSyqUCbbHTxxlUMS76+MyY9iyoU1Ms/06tRNrHXx7tR3HazKqaKwVgOLHJfW7 +F4xjopSy8TL0l5jF66810mxklPYGsEPIsBFptHmE+7NLNz8SK+mC6aM8D9Qm7126826mKyx84k PxSiHH1o/HMKS5RiXkBquPLN9PY2WVcQUJpqEjKhl0ew9s+QgHU2CsYWSMlbXNCVgosUiLUCKaO Dkbj1q9OhaLoSDi7CNYUsBWW4fEy/pfYrV9oFKpXNJFj8mjdgyc/+wsO1C2ZJefW7YN1NXyWfUi 7uUhu+X7h6Nfvjx0i7j3i7fYGvzMuLgyrUdPpfYnD+rGaG4r8wjXhWDnq9sXUnWeGLDW9lRi06w 9936F7HZoImfU35ZgrPuwAgBe5Nh8demptYz0T7yks+18gAZsnMfPJPEFuSFjqnE= X-Received: by 2002:a17:902:d507:b0:2b4:5cd0:b6c3 with SMTP id d9443c01a7336-2b45cd0bb63mr93404655ad.29.1776155459587; Tue, 14 Apr 2026 01:30:59 -0700 (PDT) X-Received: by 2002:a17:902:d507:b0:2b4:5cd0:b6c3 with SMTP id d9443c01a7336-2b45cd0bb63mr93404135ad.29.1776155459002; Tue, 14 Apr 2026 01:30:59 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 08/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with CRB Date: Tue, 14 Apr 2026 13:59:13 +0530 Message-ID: <20260414082915.112122-9-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155484541154100 Content-Type: text/plain; charset="utf-8" From: Stefan Berger To test large data transfers (receiving and sending) that make use of a CRB chunked transfer, create an ML-DSA-87 key and sign some data with it and receive the 4627 bytes signature. After this send the signature back to the TPM to have the TPM verify the signature. Signed-off-by: Stefan Berger Signed-off-by: Arun Menon --- tests/qtest/tpm-crb-swtpm-test.c | 5 +- tests/qtest/tpm-tests.c | 96 ++++++++++++++++++++++++++++++++ tests/qtest/tpm-tests.h | 4 ++ tests/qtest/tpm-util.c | 37 ++++++++++++ tests/qtest/tpm-util.h | 2 + 5 files changed, 142 insertions(+), 2 deletions(-) diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-t= est.c index 050c7b0c1f..541fd58133 100644 --- a/tests/qtest/tpm-crb-swtpm-test.c +++ b/tests/qtest/tpm-crb-swtpm-test.c @@ -37,8 +37,9 @@ static void tpm_crb_chunk_swtpm_test(const void *data) { const TestState *ts =3D data; =20 - tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer, - "tpm-crb", NULL); + tpm_test_swtpm_large_tx_test(ts->src_tpm_path, + tpm_util_crb_chunk_transfer, + "tpm-crb", NULL); } =20 static void tpm_crb_swtpm_migration_test(const void *data) diff --git a/tests/qtest/tpm-tests.c b/tests/qtest/tpm-tests.c index f71d882990..21811f3a2e 100644 --- a/tests/qtest/tpm-tests.c +++ b/tests/qtest/tpm-tests.c @@ -13,6 +13,7 @@ */ =20 #include "qemu/osdep.h" +#include "system/tpm_util.h" #include =20 #include "libqtest-single.h" @@ -130,3 +131,98 @@ void tpm_test_swtpm_migration_test(const char *src_tpm= _path, g_unlink(src_tpm_addr->u.q_unix.path); qapi_free_SocketAddress(src_tpm_addr); } + +void tpm_test_swtpm_large_tx_test(const char *src_tpm_path, tx_func *tx, + const char *ifmodel, + const char *machine_options) +{ + unsigned char signature[2 + 2 + 4627]; /* TPMT_SIGNATURE */ + unsigned char response[8192]; + unsigned char request[8192]; + SocketAddress *addr =3D NULL; + GError *error =3D NULL; + char *args =3D NULL; + GPid swtpm_pid; + QTestState *s; + gboolean succ; + + if (tpm_test_swtpm_skip()) { + return; + } + + /* Large transfers based on ML-DSA operations required default-v2 prof= ile */ + if (!tpm_util_swtpm_has_profile("default-v2", "ml-dsa")) { + return; + } + + succ =3D tpm_util_swtpm_start(src_tpm_path, &swtpm_pid, &addr, "defaul= t-v2", + &error); + g_assert_true(succ); + + args =3D g_strdup_printf( + "%s " + "-chardev socket,id=3Dchr,path=3D%s " + "-tpmdev emulator,id=3Ddev,chardev=3Dchr " + "-device %s,tpmdev=3Ddev", + machine_options ? : "", addr->u.q_unix.path, ifmodel); + + s =3D qtest_start(args); + g_free(args); + + tpm_util_startup(s, tx); + + static const unsigned char tpm_createprimary_mldsa[] =3D + "\x80\x02\x00\x00\x00\x38\x00\x00\x01\x31\x40\x00\x00\x07\x00\x00" + "\x00\x09\x40\x00\x00\x09\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00" + "\x00\x00\x0f\x00\xa1\x00\x0b\x00\x04\x04\x72\x00\x00\x00\x03\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00"; + tx(s, tpm_createprimary_mldsa, sizeof(tpm_createprimary_mldsa), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 2831); + + static const unsigned char tpm_signsequencestart[] =3D + "\x80\x01\x00\x00\x00\x12\x00\x00\x01\xaa\x80\x00\x00\x00\x00\x00" + "\x00\x00"; + tx(s, tpm_signsequencestart, sizeof(tpm_signsequencestart), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 14); + + /* Complete sequence and get signature */ + static const unsigned char tpm_signsequencecomplete[] =3D + "\x80\x02\x00\x00\x00\x2a\x00\x00\x01\xa4\x80\x00\x00\x01\x80\x00" + "\x00\x00\x00\x00\x00\x12\x40\x00\x00\x09\x00\x00\x00\x00\x00\x40" + "\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00"; + tx(s, tpm_signsequencecomplete, sizeof(tpm_signsequencecomplete), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 4655); + + /* TPMT_SIGNATURE found at offset 14 */ + memcpy(signature, &response[14], sizeof(signature)); + + static const unsigned char tpm_verifysequencestart[] =3D + "\x80\x01\x00\x00\x00\x14\x00\x00\x01\xa9\x80\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00"; + tx(s, tpm_verifysequencestart, sizeof(tpm_verifysequencestart), + response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 14); + + /* TPM2_VerifySequenceComplete */ + memcpy(request, + "\x80\x02\x00\x00\x12\x36\x00\x00\x01\xa3\x80\x00\x00\x01\x80\x= 00" + "\x00\x00\x00\x00\x00\x09\x40\x00\x00\x09\x00\x00\x00\x00\x00", + 31); + memcpy(&request[31], signature, sizeof(signature)); + tx(s, request, 31 + sizeof(signature), response, sizeof(response)); + g_assert_cmpint(tpm_cmd_get_errcode(response), =3D=3D, 0); + g_assert_cmpint(tpm_cmd_get_size(response), =3D=3D, 27); + + qtest_end(); + tpm_util_swtpm_kill(swtpm_pid); + + g_unlink(addr->u.q_unix.path); + qapi_free_SocketAddress(addr); +} diff --git a/tests/qtest/tpm-tests.h b/tests/qtest/tpm-tests.h index 07ba60d26e..6993ce40dc 100644 --- a/tests/qtest/tpm-tests.h +++ b/tests/qtest/tpm-tests.h @@ -24,4 +24,8 @@ void tpm_test_swtpm_migration_test(const char *src_tpm_pa= th, const char *ifmodel, const char *machine_options); =20 +void tpm_test_swtpm_large_tx_test(const char *src_tpm_path, tx_func *tx, + const char *ifmodel, + const char *machine_options); + #endif /* TESTS_TPM_TESTS_H */ diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index cbba5b1c1f..ad4325aade 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -211,6 +211,43 @@ bool tpm_util_swtpm_has_tpm2(void) return has_tpm2; } =20 +bool tpm_util_swtpm_has_profile(const char *profilename, + const char *content) +{ + bool has_profile =3D false; + char *out =3D NULL; + static const char *argv[] =3D { + "swtpm", "socket", "--tpm2", "--print-profiles", NULL + }; + + if (!tpm_util_swtpm_has_tpm2()) { + return false; + } + + if (!g_spawn_sync(NULL /* working_dir */, + (char **)argv, + NULL /* envp */, + G_SPAWN_SEARCH_PATH, + NULL /* child_setup */, + NULL /* user_data */, + &out, + NULL /* err */, + NULL /* exit_status */, + NULL)) { + return false; + } + + if (strstr(out, profilename)) { + has_profile =3D true; + } + if (has_profile && content && strstr(out, content) =3D=3D NULL) { + has_profile =3D false; + } + + g_free(out); + return has_profile; +} + gboolean tpm_util_swtpm_start(const char *path, GPid *pid, SocketAddress **addr, const char *profilenam= e, GError **error) diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index ca2d7d173f..90790f30db 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -39,6 +39,8 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx, const unsigned char *exp_resp, size_t exp_resp_size); =20 bool tpm_util_swtpm_has_tpm2(void); +bool tpm_util_swtpm_has_profile(const char *profilename, + const char *content); =20 gboolean tpm_util_swtpm_start(const char *path, GPid *pid, SocketAddress **addr, const char *profilenam= e, --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155486; cv=none; d=zohomail.com; s=zohoarc; b=nIFxpLDqVakN/CJzgAt0FkXbn3tXNpiIy1E3dcTmCUCQVvdkDVfMJgMCeVZo0C31X1UUqtoKJFlJnsqqDlXqZ7ZAO1vbxe9SrhTkP/XQ+joFTzpzADtaKbaq/WHlwScTkmWpRPdxTfcW5mBJJIGHStUvh2yWBf1k9IkN8+wRQTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155486; 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=k/MkHrAn19wdC2x5pWRAZghNLIir4BxoEFuwkHTb2u+Tbb8XxDEvraEQ2KfIbr7UDuUEjI0k/Z6pd+z/a8Fq8cBeVoy8bKclI5jubRGXzNz+ylsILbWI6mL2zxsT7TmF8Oa2RkIiYEBSuM61O0ABmNmfwzZQCi5dMmsv3Fmv+NY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155486934890.6279710906783; Tue, 14 Apr 2026 01:31:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZAz-0001Nr-PJ; Tue, 14 Apr 2026 04:31:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZAx-0001Fh-RB for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:15 -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 1wCZAv-00047g-KQ for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:15 -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-73-osmJiZLbP_66UXfO1frCug-1; Tue, 14 Apr 2026 04:31:11 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b2523e0299so129491055ad.3 for ; Tue, 14 Apr 2026 01:31:11 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.30.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:31:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155472; 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=W/IdM70Bwj6aWlE4JIJhzd70oxe7SaFhxQvBsRK2x+DoVVvfIXIjY70PHZhwjyucJzKnpO XBEmeP+oZOgFOCucuuplWXTt1SgqfXaRIMHMQxgr97eektPFW+9gZpCB4VocRxh6fEXyg3 ZcO3zXV7U459CZ2MF9VGPKPtC6Y/foc= X-MC-Unique: osmJiZLbP_66UXfO1frCug-1 X-Mimecast-MFC-AGG-ID: osmJiZLbP_66UXfO1frCug_1776155471 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155470; x=1776760270; 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=NxENyXtL3Ye4D0f5rkcxHzko66O99Ik51vc0rj+c87jD7MzDTG1c0ofCkUPxdYylxl nUXakZaWAna9Dxj7ybQzg/Latb/J0QdSAxN1jzV5AV0xS/FV2oBqLqXsusa0Zhpy5Wvc PceSipnJ9SF4BbcOqGw1iXqF62rrQvbSCr92oJv24jh5yALaP99CtUDW/Qv1Vh5DgoUh YY7IT6Uows7miFdZogsLeR7Sq1jktOzquB0gf26j0EWu800J7QB8pRIo0HKi+7B+hpe7 Wdxdm5OP6hmSIAFdg/SVBkOZ5hfGQFYCf8kgb9LBLhLzbxhLyXyUx2C1+WWAZ5NuXFvd 5Jqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155470; x=1776760270; 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=VVXBD14K1rSthcMxcBQIQubZ6tG6zG/U0gijfkr3pBJna+DlKAEka3edShDirSS+Tj 9+wv1MyWgjbyLFsfH54dO1DQlk7BnUIgHU2cU/IlS50Gi3V3VqGxdeNsAhcd13shvXEE ZhCa5WvqqwNwVvm79ijbED1Hd+Zxtw/ZwSGNzCM/QeWRZprQaxKhxqya6jHEU5e3tfgy 5AY9IbPqaX3DZd5+orhsdZokYFDAJmMEY8RrjRDGi0cKTl+0yoJ/KuPQi0quBhz9ujzc 5uk7taRGyej9NK1e/94s5kHOnW5lmN0tfyvrkVvrwzBukeHqGuj2SVE6y8JMjUlAYjeV Jyzg== X-Gm-Message-State: AOJu0YzQCzQWlI03P3Deb9Iq19G5bMiyS8zVvmdVcxQupkFfwmCGIntW 0gnElpdc8nDGEJlgktdiW7whDUhQHSSnFU8jJZNAOhuuH7x3Ko6X7uoFIJKnZg0dckZ8CPv7bpy SVqei5KhjAEhd+Ivg05JE9c0OY7Pe3/pRfIfjP8w22AAyzHB96V0V+4v9Ws6MQsF0Ak8vBV5F0Y VPJjniPia4aU53SCfjts6cdT2D2/2oNHaeB7i3qMY= X-Gm-Gg: AeBDievRgfw95zCsZUp4pFvw2w9WbxOTmiiOhAEfbvIASHhW9Y2ZTwIePvFPGBez4MS SOmni+Es5KIvGD6ceI3tt57nU75yJsSHFqW8KGx1YMuExKiCf+VxIJYOaSRMBr+grrkFNBi8Q5f f2y9oZUHF5MEl+KbkSxCmHUcLJYeX3S34zuQnyWk0hWl2lsOrlUEa5SGwJZ8G2NxUM5py44s0Ei adf2uKN54bIoqT2P6nrwJw3owLs1pDsEakHuYkcNGyFjawoT80tDuxPpT4E453jLcY7Iqw3MdzC UxixCnuPx9djEKja3UVDOjR8UtujMBXUgYkyyKSC7+bEvDNZRXPXw3IZ9GHiKRnZLAJyY1j0RAw v9cP/sBETxlMf+AZT6/R5qyd7OM04s3YXhb7ODVaIxmnq3PqYKXHSsawD32mDRdY= X-Received: by 2002:a17:903:2285:b0:2b0:b1e7:8841 with SMTP id d9443c01a7336-2b2d5a49b1emr169400585ad.32.1776155470283; Tue, 14 Apr 2026 01:31:10 -0700 (PDT) X-Received: by 2002:a17:903:2285:b0:2b0:b1e7:8841 with SMTP id d9443c01a7336-2b2d5a49b1emr169400185ad.32.1776155469634; Tue, 14 Apr 2026 01:31:09 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 09/10] tpm: Extend TPM TIS buffer size to 8192 bytes Date: Tue, 14 Apr 2026 13:59:14 +0530 Message-ID: <20260414082915.112122-10-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155488983158500 Content-Type: text/plain; charset="utf-8" From: Stefan Berger Extend the TIS buffer size to 8192 bytes and store the first 4096 bytes using VMSTATE_PARTIAL_BUFFER and the rest using VMSTATE_BUFFER_START_MIDDLE when necessary. It is necessary to store the buffer beyond original 4096 bytes when: - the user has written more than 4096 bytes to the buffer - the TPM 2 response is larger than 4096 bytes Use the .needed function of the VMStateDescription interface to check whether the bytes in the buffer beyond 4096 bytes needed to be saved. The .pre_save function is called before the .needed function so that we can be sure to have received any response packet from the TPM. Signed-off-by: Stefan Berger [ Arun Menon - Removed WIP tag and TODO for submission ] Signed-off-by: Arun Menon --- hw/tpm/tpm_tis.h | 2 ++ hw/tpm/tpm_tis_common.c | 23 +++++++++++++++++++++++ hw/tpm/tpm_tis_i2c.c | 24 +++++++++++++++++++++++- hw/tpm/tpm_tis_isa.c | 24 +++++++++++++++++++++++- hw/tpm/tpm_tis_sysbus.c | 24 +++++++++++++++++++++++- 5 files changed, 94 insertions(+), 3 deletions(-) diff --git a/hw/tpm/tpm_tis.h b/hw/tpm/tpm_tis.h index 184632ff66..d35c332287 100644 --- a/hw/tpm/tpm_tis.h +++ b/hw/tpm/tpm_tis.h @@ -90,4 +90,6 @@ uint32_t tpm_tis_read_data(TPMState *s, hwaddr addr, unsi= gned size); void tpm_tis_write_data(TPMState *s, hwaddr addr, uint64_t val, uint32_t s= ize); uint16_t tpm_tis_get_checksum(TPMState *s); =20 +bool tpm_tis_ext_buffer_migration_needed(struct TPMState *s); + #endif /* TPM_TPM_TIS_H */ diff --git a/hw/tpm/tpm_tis_common.c b/hw/tpm/tpm_tis_common.c index f594b15b8a..dffb0a411e 100644 --- a/hw/tpm/tpm_tis_common.c +++ b/hw/tpm/tpm_tis_common.c @@ -890,3 +890,26 @@ const VMStateDescription vmstate_locty =3D { } }; =20 +bool tpm_tis_ext_buffer_migration_needed(struct TPMState *s) +{ + if (!TPM_TIS_IS_VALID_LOCTY(s->active_locty)) { + return false; + } + + switch (s->loc[s->active_locty].state) { + case TPM_TIS_STATE_IDLE: + case TPM_TIS_STATE_READY: + return false; + case TPM_TIS_STATE_RECEPTION: + return s->rw_offset >=3D 4096; + case TPM_TIS_STATE_EXECUTION: + /* + * TPM is executing: we cannot know the size of TPM response. + * .pre_save must have been called before (should never get here). + */ + return false; + case TPM_TIS_STATE_COMPLETION: + return (tpm_cmd_get_size(&s->buffer) >=3D 4096); + } + return false; +} diff --git a/hw/tpm/tpm_tis_i2c.c b/hw/tpm/tpm_tis_i2c.c index 9f13e0ec12..a01df7e5a0 100644 --- a/hw/tpm/tpm_tis_i2c.c +++ b/hw/tpm/tpm_tis_i2c.c @@ -110,13 +110,31 @@ static int tpm_tis_i2c_post_load(void *opaque, int ve= rsion_id) return 0; } =20 +static bool tpm_tis_ext_buffer_migration_needed_i2c(void *opaque) +{ + TPMStateI2C *i2cst =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&i2cst->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_i2c =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_i2c, + .pre_save =3D tpm_tis_i2c_pre_save, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateI2C, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_i2c =3D { .name =3D "tpm-tis-i2c", .version_id =3D 0, .pre_save =3D tpm_tis_i2c_pre_save, .post_load =3D tpm_tis_i2c_post_load, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateI2C), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateI2C, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateI2C), VMSTATE_UINT8(state.active_locty, TPMStateI2C), VMSTATE_UINT8(state.aborting_locty, TPMStateI2C), @@ -133,6 +151,10 @@ static const VMStateDescription vmstate_tpm_tis_i2c = =3D { VMSTATE_UINT8(csum_enable, TPMStateI2C), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_i2c, + NULL, } }; =20 diff --git a/hw/tpm/tpm_tis_isa.c b/hw/tpm/tpm_tis_isa.c index 61e95434f5..73038f1a10 100644 --- a/hw/tpm/tpm_tis_isa.c +++ b/hw/tpm/tpm_tis_isa.c @@ -49,12 +49,30 @@ static int tpm_tis_pre_save_isa(void *opaque) return tpm_tis_pre_save(&isadev->state); } =20 +static bool tpm_tis_ext_buffer_migration_needed_isa(void *opaque) +{ + TPMStateISA *isadev =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&isadev->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_isa =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_isa, + .pre_save =3D tpm_tis_pre_save_isa, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateISA, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_isa =3D { .name =3D "tpm-tis", .version_id =3D 0, .pre_save =3D tpm_tis_pre_save_isa, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateISA), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateISA, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateISA), VMSTATE_UINT8(state.active_locty, TPMStateISA), VMSTATE_UINT8(state.aborting_locty, TPMStateISA), @@ -64,6 +82,10 @@ static const VMStateDescription vmstate_tpm_tis_isa =3D { vmstate_locty, TPMLocality), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_isa, + NULL, } }; =20 diff --git a/hw/tpm/tpm_tis_sysbus.c b/hw/tpm/tpm_tis_sysbus.c index e9372e7316..86fc5a592c 100644 --- a/hw/tpm/tpm_tis_sysbus.c +++ b/hw/tpm/tpm_tis_sysbus.c @@ -48,12 +48,30 @@ static int tpm_tis_pre_save_sysbus(void *opaque) return tpm_tis_pre_save(&sbdev->state); } =20 +static bool tpm_tis_ext_buffer_migration_needed_sysbus(void *opaque) +{ + TPMStateSysBus *sbdev =3D opaque; + + return tpm_tis_ext_buffer_migration_needed(&sbdev->state); +} + +static const VMStateDescription vmstate_tpm_tis_ext_buffer_sysbus =3D { + .name =3D "tpm-tis/ext_buffer", + .version_id =3D 0, + .needed =3D tpm_tis_ext_buffer_migration_needed_sysbus, + .pre_save =3D tpm_tis_pre_save_sysbus, + .fields =3D (const VMStateField[]) { + VMSTATE_BUFFER_START_MIDDLE(state.buffer, TPMStateSysBus, 4096), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_tis_sysbus =3D { .name =3D "tpm-tis", .version_id =3D 0, .pre_save =3D tpm_tis_pre_save_sysbus, .fields =3D (const VMStateField[]) { - VMSTATE_BUFFER(state.buffer, TPMStateSysBus), + VMSTATE_PARTIAL_BUFFER(state.buffer, TPMStateSysBus, 4096), VMSTATE_UINT16(state.rw_offset, TPMStateSysBus), VMSTATE_UINT8(state.active_locty, TPMStateSysBus), VMSTATE_UINT8(state.aborting_locty, TPMStateSysBus), @@ -63,6 +81,10 @@ static const VMStateDescription vmstate_tpm_tis_sysbus = =3D { 0, vmstate_locty, TPMLocality), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription *const[]) { + &vmstate_tpm_tis_ext_buffer_sysbus, + NULL, } }; =20 --=20 2.53.0 From nobody Thu Apr 30 00:40:27 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=1776155509; cv=none; d=zohomail.com; s=zohoarc; b=d3DSpgU8UPFZwjvUNxXyehs1ee5KIrfTmWl4gjtQ7uDLgU7hYAoOTqus45Z2Op7wOBwsmbwXhUgHBDA3vrgHUKk8Qi4gAGUjaQbs52b1qj8fKQuudLQksmqx9junilBFUzuqxOcptJxOB8IZuG6KOP4L5P1XIcXAbaBR2iNjt1E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776155509; 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=ArtY/fKmg+Sy5bVWIjMmEQo0BZV3bYgnCaRVpbyPBy/OOvLiTNCwUGwxXHfnNP01EPXKy/FTkdlRrh8GdlRz6t5wurSSlNdST/j9w88fMU0zr8Tg2nGnvANah1A7Xl1CLW/Fa3zzRvcmvB2W1Zurwjh56qR8KIvpBOds09YAr80= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776155509979189.68064743199716; Tue, 14 Apr 2026 01:31:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wCZB8-0001l7-S4; Tue, 14 Apr 2026 04:31:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wCZB7-0001eY-94 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:25 -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 1wCZB4-000494-U1 for qemu-devel@nongnu.org; Tue, 14 Apr 2026 04:31:24 -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-642-2Xx4-2bzP-OhiiMjVVfHzw-1; Tue, 14 Apr 2026 04:31:18 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b2e91add2aso24774695ad.1 for ; Tue, 14 Apr 2026 01:31:18 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.202]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2d4e0f909sm181493785ad.35.2026.04.14.01.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 01:31:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776155479; 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=O5l3uCDIANjvXt/QBDZlnlyy/3n1a05DtAkkYj0qDYdYMq0mQX771RrRLpzG/NirS0/RXB 6qpiq3wW6L7XImmrfAz7xiuvWD4IvSpxr51N3onMhpLHQoMqOPfE0hzeFEkfOj8JGPYUHX xIZ4eogd7J/N+NJEKXiNOyWD4tc7TW4= X-MC-Unique: 2Xx4-2bzP-OhiiMjVVfHzw-1 X-Mimecast-MFC-AGG-ID: 2Xx4-2bzP-OhiiMjVVfHzw_1776155477 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776155477; x=1776760277; 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=Q+AsBfMC0Lg5ChthbHKmnlLrjOIH8w0jagpcDhUxm5jv25D6I9hlsim5d/Tol3K9bD 3f9u7L5/rh8EhdnQut8yygLuMQDVqTmarQEfJH9T9ysBAwq/Tc9Wksqkni0Xy2GM0cID HyV22A1U5AkRCp2B8WZ5M5r6LMrJHW7X6aK761FEARHQti9ruXfb4eLevZVmZvXkybwV sfTWdSXegKNr3o74cgqiQg16h6RpLhIHgTSnBvlWyvAwsAelJ3hd9NQc3+MSY+IgpzZ2 Nn2lSryXHxVmIHvk5d4cHeKVRblN8TER4OrL4MyzlxA+hr1jPF4QQjnW20VV0q0N1bE5 r4QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776155477; x=1776760277; 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=hzKSmuPqNaT4FnUIF0mjsfsJL+KnYSslraDIXDdJzIU+5pZHP14VYebI4MkecPqFH3 a9TACe1on0B66fAgBWA8BXBygdFYi+uOXanW5DvSBfQmBXmgqkVuUVOknVRIXHCDxjGB lceM25/x/54y4aXrUv5zsWg4qfTV1G3boFXRzocCYdPI76lrOFpNFHUJJcSTBJ7eECXL kP42kfTR1Nj0AbozZvwweSuHtBVEAvz5pT5Ph1jTj6xMas3PnzHeK75POri0MddHJhXP Mp10+MNd+s/0QXF4iE/fzt07V+luGAIqd011CAzp/f5rKpqgDoVV7Z/KpDxTI/LLztOH zeCQ== X-Gm-Message-State: AOJu0Yzr4dyFf3A02//nW9K3aeESd6r8Z9MCW9y1CdZjXuegfps7FyO5 BWK2bz+DtlqX7fa27x7m0uPzTqk2yhRFTNIu1PhGuuez9bbM+Mx4FQsTcxbBl3vDaIN2IswdC1/ 4Zyg4E6TqBsz+1C0gIxdT37kiqj0XNwSCO7VJyLoNshp+evL7uQfCViuWsYJcNgDgEL6WyslAbg Sw3QXA1ltOZIXmKleFyu6+aNCsKyOOejnqIfrB06E= X-Gm-Gg: AeBDieudIE7P3zz45jfkbFouiipuq6oPJ3bbLqQl5AhklHEVHGryV/zCyKn8p59tObH 3e19Yddizt487+3SHUXr1IIBr1nAdPqZsskMncYBeeiXuUJdCzHcO/+HXx0nU0kwCiL6X2oQMYd ++fZD4y+jesgp7GwgnZU/sAWee/P/7buX77XpMAnBUJ+qI6Eu2qCamcsnSVfud+JsH1bdfFQr5H 3KkeOF8JQ1zi+wMsEeSHsZNVNxA0NKfSjHYoY/Y0PySYVYfmukwAqR27tegDdPnmag6ggWAB4kf KJJidwwOUzmIQWhKohnpQ3IknRpxAGTQuYbhKCgQ2VWdFXhgqX4goTqigb3lN3I7vjiS9/pKdaF L1s/RZcoMXGWVXAi9yh0Ed1g+rDlIBD7eh81ZORs7NuE9tP25d7UYOjAHTKQGuCs= X-Received: by 2002:a17:902:ce0f:b0:2b0:708f:4dc7 with SMTP id d9443c01a7336-2b2d5a2a1a4mr184843275ad.29.1776155477071; Tue, 14 Apr 2026 01:31:17 -0700 (PDT) X-Received: by 2002:a17:902:ce0f:b0:2b0:708f:4dc7 with SMTP id d9443c01a7336-2b2d5a2a1a4mr184842705ad.29.1776155476430; Tue, 14 Apr 2026 01:31:16 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Yanan Wang , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Berger , Paolo Bonzini , Marcel Apfelbaum , Zhao Liu , marcandre.lureau@redhat.com, Igor Mammedov , Laurent Vivier , Fabiano Rosas , Arun Menon , Stefan Berger Subject: [PATCH v4 10/10] tests: Use ML-DSA-87 operations to caused large TPM transfers with TIS Date: Tue, 14 Apr 2026 13:59:15 +0530 Message-ID: <20260414082915.112122-11-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260414082915.112122-1-armenon@redhat.com> References: <20260414082915.112122-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1776155512832154100 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