From nobody Tue Oct 22 23:33:53 2024 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1729085746; cv=none; d=zohomail.com; s=zohoarc; b=alQ6Imm3G2icGGV3T6cWlVWdrEoWR3jTijqg3hdvpYMEBU2B3xmJBAYf7IKEzdJSkO+mXkVZyeOpY7oEkpqEW0G5J6gDcBeIHIgzH7W8le0NTqyBb+5GPLxIskFYF/RCHa92foEoBHzsidyK8RyW6vKPdxYQZiXdexM4Z97pK8Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1729085746; 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=mFg3LtSxA9ofG+p5EO8CHIVS6YpMggqXCWa+vqK4aI0=; b=OfTgfZFw1lMUl8ZkgYVTQ83mGqUm9ddYkrC7kLPXJZFrEO1uvCYsHAU/ivvvb18RQMyfyQDtRmX8FhrnRYRRirdnrFHyyn2z7mP4hgqoplupFnV7GYX0kVPJKHzaWrq2DEvnn1v/tXYuFLKjkAf/ECL26eqtjl1eSA2cWHvXWBI= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1729085746106377.95767503830655; Wed, 16 Oct 2024 06:35:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1t14BY-0001B3-Hv; Wed, 16 Oct 2024 09:35:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t14B5-0000rc-GA for qemu-devel@nongnu.org; Wed, 16 Oct 2024 09:35:04 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t14B3-00049d-GQ for qemu-devel@nongnu.org; Wed, 16 Oct 2024 09:35:03 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 49GBtLgH026540 for ; Wed, 16 Oct 2024 13:35:00 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 42ad1j0g6g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 16 Oct 2024 13:35:00 +0000 (GMT) Received: from m0360072.ppops.net (m0360072.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 49GDSdZM001645 for ; Wed, 16 Oct 2024 13:34:59 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 42ad1j0g6e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 16 Oct 2024 13:34:59 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 49GANjFw006415; Wed, 16 Oct 2024 13:34:59 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4284xk9hfn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 16 Oct 2024 13:34:59 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 49GDYwI339453062 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Oct 2024 13:34:58 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 109B958054; Wed, 16 Oct 2024 13:34:58 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8B45558050; Wed, 16 Oct 2024 13:34:57 +0000 (GMT) Received: from sbct-3.pok.ibm.com (unknown [9.47.158.153]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 16 Oct 2024 13:34:57 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=mFg3LtSxA9ofG+p5E O8CHIVS6YpMggqXCWa+vqK4aI0=; b=OE1sZ9n0b1ZVO0Twp9h/L4CVcD5f4rGb+ uVF3+DGXIN4KoiwYpN+qU3d6EKqnWgBWt3drfWdnMsrZXpcF9IMIp6XjnUr7D9OQ PVIPMr4+UFKYo1yQLc08ZivA3nYRA2OaT0WZ/m4YkuLCfjIIkFHaCwTky28/FvpM yYMmB4FTKidxHqvAB7Jx0BO6LudL4uO8mCPwHF58xJqPnS0twcA4YT54yz9YIXrV N3Xx4xPuSVWY/QL9O7adKOH9+MhWyR2Rio6KC2P9phPGq/Lq+k2Yp6B49x7lInX+ MNkFJA16SDrSyx18lPvheYE3+VN427cQHus6ojlb+7J/qby9PiLPg== From: Stefan Berger To: qemu-devel@nongnu.org Cc: berrange@redhat.com, marcandre.lureau@gmail.com, Stefan Berger Subject: [PATCH v2 1/2] tpm: Use new ptm_cap_n structure for PTM_GET_CAPABILITY Date: Wed, 16 Oct 2024 09:34:49 -0400 Message-ID: <20241016133450.1071197-2-stefanb@linux.ibm.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241016133450.1071197-1-stefanb@linux.ibm.com> References: <20241016133450.1071197-1-stefanb@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 7jg_pyBhaVEpfKecBCGDv8ig4oihT5vg X-Proofpoint-ORIG-GUID: d5-mZqRPXwMTPuxHPx4bVl5WYHVOTxQ7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-15_01,2024-10-11_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 mlxscore=0 clxscore=1015 spamscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 adultscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2410160084 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=stefanb@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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 @ibm.com) X-ZM-MESSAGEID: 1729085747654116600 Content-Type: text/plain; charset="utf-8" Use the new ptm_cap_n structure for getting the PTM_GET_CAPABILITY response from swtpm. Previously only 17 bits could possibly have been set in ptm_cap (=3Duint64_t) in big endian order and those bits are now found in the 2nd 32bit word in the response in the caps field. This data structure makes it now clear that the 1st 32bit word carries the tpm_result like all the other response structures of all other commands do. Signed-off-by: Stefan Berger --- backends/tpm/tpm_emulator.c | 14 ++++++++------ backends/tpm/tpm_ioctl.h | 13 ++++++++++++- backends/tpm/trace-events | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c index 5a8fba9bde..b0e2fb3fc7 100644 --- a/backends/tpm/tpm_emulator.c +++ b/backends/tpm/tpm_emulator.c @@ -72,7 +72,7 @@ struct TPMEmulator { CharBackend ctrl_chr; QIOChannel *data_ioc; TPMVersion tpm_version; - ptm_cap caps; /* capabilities of the TPM */ + uint32_t caps; /* capabilities of the TPM */ uint8_t cur_locty_number; /* last set locality */ Error *migration_blocker; =20 @@ -239,13 +239,15 @@ static void tpm_emulator_handle_request(TPMBackend *t= b, TPMBackendCmd *cmd, =20 static int tpm_emulator_probe_caps(TPMEmulator *tpm_emu) { + ptm_cap_n cap_n; + if (tpm_emulator_ctrlcmd(tpm_emu, CMD_GET_CAPABILITY, - &tpm_emu->caps, 0, sizeof(tpm_emu->caps)) < 0= ) { + &cap_n, 0, sizeof(cap_n)) < 0) { error_report("tpm-emulator: probing failed : %s", strerror(errno)); return -1; } =20 - tpm_emu->caps =3D be64_to_cpu(tpm_emu->caps); + tpm_emu->caps =3D be32_to_cpu(cap_n.u.resp.caps); =20 trace_tpm_emulator_probe_caps(tpm_emu->caps); =20 @@ -254,7 +256,7 @@ static int tpm_emulator_probe_caps(TPMEmulator *tpm_emu) =20 static int tpm_emulator_check_caps(TPMEmulator *tpm_emu) { - ptm_cap caps =3D 0; + uint32_t caps =3D 0; const char *tpm =3D NULL; =20 /* check for min. required capabilities */ @@ -527,8 +529,8 @@ static size_t tpm_emulator_get_buffer_size(TPMBackend *= tb) static int tpm_emulator_block_migration(TPMEmulator *tpm_emu) { Error *err =3D NULL; - ptm_cap caps =3D PTM_CAP_GET_STATEBLOB | PTM_CAP_SET_STATEBLOB | - PTM_CAP_STOP; + uint32_t caps =3D PTM_CAP_GET_STATEBLOB | PTM_CAP_SET_STATEBLOB | + PTM_CAP_STOP; =20 if (!TPM_EMULATOR_IMPLEMENTS_ALL_CAPS(tpm_emu, caps)) { error_setg(&tpm_emu->migration_blocker, diff --git a/backends/tpm/tpm_ioctl.h b/backends/tpm/tpm_ioctl.h index 1933ab6855..ee2dd15d35 100644 --- a/backends/tpm/tpm_ioctl.h +++ b/backends/tpm/tpm_ioctl.h @@ -29,6 +29,16 @@ =20 typedef uint32_t ptm_res; =20 +/* PTM_GET_CAPABILITY: Get supported capabilities (ioctl's) */ +struct ptm_cap_n { + union { + struct { + ptm_res tpm_result; /* will always be TPM_SUCCESS (0) */ + uint32_t caps; + } resp; /* response */ + } u; +}; + /* PTM_GET_TPMESTABLISHED: get the establishment bit */ struct ptm_est { union { @@ -242,7 +252,8 @@ struct ptm_lockstorage { } u; }; =20 -typedef uint64_t ptm_cap; +typedef uint64_t ptm_cap; /* CUSE-only; use ptm_cap_n otherwise */ +typedef struct ptm_cap_n ptm_cap_n; typedef struct ptm_est ptm_est; typedef struct ptm_reset_est ptm_reset_est; typedef struct ptm_loc ptm_loc; diff --git a/backends/tpm/trace-events b/backends/tpm/trace-events index cb5cfa6510..05e30533ce 100644 --- a/backends/tpm/trace-events +++ b/backends/tpm/trace-events @@ -16,7 +16,7 @@ tpm_util_show_buffer_content(const char *buf) "%s" # tpm_emulator.c tpm_emulator_set_locality(uint8_t locty) "setting locality to %d" tpm_emulator_handle_request(void) "processing TPM command" -tpm_emulator_probe_caps(uint64_t caps) "capabilities: 0x%"PRIx64 +tpm_emulator_probe_caps(uint32_t caps) "capabilities: 0x%x" tpm_emulator_set_buffer_size(uint32_t buffersize, uint32_t minsize, uint32= _t maxsize) "buffer size: %u, min: %u, max: %u" tpm_emulator_startup_tpm_resume(bool is_resume, size_t buffersize) "is_res= ume: %d, buffer size: %zu" tpm_emulator_get_tpm_established_flag(uint8_t flag) "got established flag:= %d" --=20 2.47.0 From nobody Tue Oct 22 23:33:53 2024 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1729085755; cv=none; d=zohomail.com; s=zohoarc; b=nYnKcjCOxv1VmVlHq1XndOpdEqzMuJj0U6tiUOTEpiwnRDskepszBGojCVgMtbVRbSm6nEb/CeIv6+gWsT7FwUGYCwGLuwdtP+LVjlxc0ei6RRoJzFpSj/V8lIPNTbtOhgXDV/xWlVnJsJL3K4rp+Cc+Ix8ejLB7CvhWRnEnBms= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1729085755; 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=GN1Hq6j9I3FWk+035MqB8fKDHbeRygIDEpGYhCCG8Qk=; b=oIHmi4YyGT4PciFmcxTCEa97rmf1aawOIzY1s2HzbUMO9xq+FGpGY7MhnJMFs0xjYUqH6U2wt7fsuC2L/xePUoPmGuNUHC+7/CYWppXxkxD4lTQYoc8bEWdvTkVn8FKnMgaHzQcS3dzZ3wyoWYTQFJUcx63zTQafnpIhEfCeg4M= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1729085755123519.1318409814146; Wed, 16 Oct 2024 06:35:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1t14BT-00015H-UT; Wed, 16 Oct 2024 09:35:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t14B5-0000rg-Hh for qemu-devel@nongnu.org; Wed, 16 Oct 2024 09:35:04 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t14B3-00049i-MH for qemu-devel@nongnu.org; Wed, 16 Oct 2024 09:35:03 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 49GDQCNl028115 for ; Wed, 16 Oct 2024 13:35:00 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 42aebxg196-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 16 Oct 2024 13:35:00 +0000 (GMT) Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 49GDZ0Cp016756 for ; Wed, 16 Oct 2024 13:35:00 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 42aebxg193-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 16 Oct 2024 13:35:00 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 49GCg5eH006690; Wed, 16 Oct 2024 13:34:59 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4283es1umy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 16 Oct 2024 13:34:59 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 49GDYwVS43123040 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Oct 2024 13:34:59 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AF8EA58052; Wed, 16 Oct 2024 13:34:58 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3685558050; Wed, 16 Oct 2024 13:34:58 +0000 (GMT) Received: from sbct-3.pok.ibm.com (unknown [9.47.158.153]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 16 Oct 2024 13:34:58 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=GN1Hq6j9I3FWk+035 MqB8fKDHbeRygIDEpGYhCCG8Qk=; b=hxMl2x/zNMiUxufL6zIrq7ct0X+Dz2FII hoqHw35SFlDQea9x3uyfZOKR2Y0SOjJy3QJQ4FobMNW/m3toL7i6zIyyDNgI29wF W0D0Be2BCZX8Wc5Cfb8XgAcReAA/zj3odEi3K2vkjPnq5GooWcYqKnkisinGP1JY AERQZpYkb6VYMDE/hx0dsH47cfCZLNl7P1MraFFJ9qLZC51eFrWsyI7k8b0q5FKO r+dXrbXsVpCp1jpHdd4NFhopUn/t0mIVE5q6423sZmbXewTkgakZkELiRLUtWytK hmdB3rnNxq/w2vOhCtkIdxYN2MjF9ttEjuZkC4XvR49ZQy747BPZQ== From: Stefan Berger To: qemu-devel@nongnu.org Cc: berrange@redhat.com, marcandre.lureau@gmail.com, Stefan Berger Subject: [PATCH v2 2/2] tpm_emulator: Read control channel response in 2 passes Date: Wed, 16 Oct 2024 09:34:50 -0400 Message-ID: <20241016133450.1071197-3-stefanb@linux.ibm.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241016133450.1071197-1-stefanb@linux.ibm.com> References: <20241016133450.1071197-1-stefanb@linux.ibm.com> X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: p_X998_q_CjIygA8mHS2Q0yc9jHLk-2b X-Proofpoint-GUID: W-sZN8HUY6Ht_cT4it85qZOcjiYe1OyK Content-Transfer-Encoding: quoted-printable X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-15_01,2024-10-11_01,2024-09-30_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxlogscore=754 clxscore=1015 lowpriorityscore=0 impostorscore=0 mlxscore=0 adultscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 bulkscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2410160084 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=stefanb@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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: 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 @ibm.com) X-ZM-MESSAGEID: 1729085755465116600 Content-Type: text/plain; charset="utf-8" Error responses from swtpm are always only 4 bytes long with the exception of CMD_GET_STATEBLOB that returns more bytes. Therefore, read the entire response in 2 passes and stop if the first 4 bytes indicate an error response with no subsequent bytes readable. Read the rest in a 2nd pass, if needed. This avoids getting stuck while waiting for too many bytes if only 4 bytes were sent due to an error message. The 'getting stuck' condition has not been observed in practice so far, though. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2615 Signed-off-by: Stefan Berger --- backends/tpm/tpm_emulator.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c index b0e2fb3fc7..8f5d31be09 100644 --- a/backends/tpm/tpm_emulator.c +++ b/backends/tpm/tpm_emulator.c @@ -129,6 +129,9 @@ static int tpm_emulator_ctrlcmd(TPMEmulator *tpm, unsig= ned long cmd, void *msg, uint32_t cmd_no =3D cpu_to_be32(cmd); ssize_t n =3D sizeof(uint32_t) + msg_len_in; uint8_t *buf =3D NULL; + ptm_res res; + off_t o =3D 0; + int to_read; =20 WITH_QEMU_LOCK_GUARD(&tpm->mutex) { buf =3D g_alloca(n); @@ -140,11 +143,35 @@ static int tpm_emulator_ctrlcmd(TPMEmulator *tpm, uns= igned long cmd, void *msg, return -1; } =20 - if (msg_len_out !=3D 0) { - n =3D qemu_chr_fe_read_all(dev, msg, msg_len_out); + /* + * Any response will be at least 4 bytes long. Error responses are= only + * 4 bytes (=3Dsizeof(ptm_res)), with exception by CMD_GET_STATEBL= OB. + * Therefore, read response in 2 passes, returning when an error + * response is encountered. + */ + if (cmd =3D=3D CMD_GET_STATEBLOB) { + to_read =3D msg_len_out; + } else { + to_read =3D sizeof(res); + } + + while (msg_len_out > 0) { + n =3D qemu_chr_fe_read_all(dev, (uint8_t *)msg + o, to_read); if (n <=3D 0) { return -1; } + msg_len_out -=3D to_read; + if (msg_len_out =3D=3D 0) { + return 0; + } + + memcpy(&res, msg, sizeof(res)); + if (res) { + return 0; + } + + o =3D to_read; + to_read =3D msg_len_out; } } =20 --=20 2.47.0