From patchwork Tue Jun 13 18:02:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 107503 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp741576vqr; Tue, 13 Jun 2023 11:16:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4+qJ6I71M+/f4uqt+A85dJneqJv4obbkNcAFtyAS5dYpvl3s/ZZSxyQTupfsyKar+5mYRK X-Received: by 2002:a17:902:f546:b0:1b2:1942:9106 with SMTP id h6-20020a170902f54600b001b219429106mr10475462plf.64.1686680205713; Tue, 13 Jun 2023 11:16:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686680205; cv=none; d=google.com; s=arc-20160816; b=Y62uJ+xPDfkUDCrVjiiutiW7nCr8F7ERbyFZE+Ws0GZ5Dy4iCtxrx13UAEyhdIn/oZ BIRQk8zETqQn2DdfWbeBjcbTyB4ogRMq3BGaYj3xeQb5UNK1oJR2NZCo8k6w2Rpnpm7T 1rh3o3I5bAmSouEv537/TQMYk8tTYf4ZTCeacjdgoeskNkN2WNPkYZQCBqUt3un3NmQ9 r4P0hTI0RLXwXBWCRQoKte/JR4og/6wWPgOEu3BhL4nP5JjJbMvqiBjH6rLsSi+hPAsn JPHt/lhkGL8RlyVaeaddvOXth5WLvW4zCF/OTh1okT8jblv4etvehBWr0Hb8J5vlU7qz 5OGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jzMSX9szzmTEHGRBH/satl3OXsPQGP/TLq72FMBNX1I=; b=wMzJaFj/MKfkFXpLJAyJTvcVJr5LjIon0p0adnhJXz1/Wl/qPZ/AjTs4E8sNDHerx/ knf9xHvoBMTr+BX5gYF1KUH5in1MQm0Hma8HP4rS+ttEslQe6fNiLeZ5D0s4IGfMu36j lqShmSJxOVkMFmt5Fx7l8ELiT1Q51H+63hvSuyDMeRpGDcCm+Z+UGB/sHLnHMNaRv5f1 nkfdpAtNaOdYgrHnEAfMztfypYJC/TwcWaEaSk6bmGCz/g0ENWuAOaSApZzMbzlEqsvw mwrQCvtXWkxcqWu//o18e3uvd4IpnKs2C/rz3Wbr3OS7tdwMhuCSfxHQ1t/7GqZT6kki pD/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=ogEGAI7w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s4-20020a170902ea0400b001ab0727a2c0si4525574plg.424.2023.06.13.11.16.33; Tue, 13 Jun 2023 11:16:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=ogEGAI7w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239561AbjFMSD3 (ORCPT + 99 others); Tue, 13 Jun 2023 14:03:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232105AbjFMSDV (ORCPT ); Tue, 13 Jun 2023 14:03:21 -0400 Received: from smtp2.infineon.com (smtp2.infineon.com [IPv6:2a00:18f0:1e00:4::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2832319B2; Tue, 13 Jun 2023 11:03:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1686679399; x=1718215399; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=S+EviMEa0wKQ948HPrnrT9RrRoeXZs1hePPbHJoq8fk=; b=ogEGAI7wXvOGi9N6sxb+y7Ra7LUx7cORUqk92YBBvC/crv/l2OA43YjW W+KzzDeYBS0rh0B3VuIB/ieMMXE3cBj4Smgk1Gs/rGX/76q7XosGi8DgT MrmwKG3SMw0XFW6/ZOc/QFaJ9J5tqt13mh7pf7GxLi3l+K1ApqdbksnFj E=; X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="41820522" X-IronPort-AV: E=Sophos;i="6.00,240,1681164000"; d="scan'208";a="41820522" Received: from unknown (HELO MUCSE819.infineon.com) ([172.23.29.45]) by smtp2.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 20:03:16 +0200 Received: from KLUSE818.infineon.com (172.28.156.171) by MUCSE819.infineon.com (172.23.29.45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 Received: from ISCNPC0VBFBX.infineon.com (10.161.6.196) by KLUSE818.infineon.com (172.28.156.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:15 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen , Subject: [PATCH v3 1/4] tpm_tis: Explicitly check for error code Date: Tue, 13 Jun 2023 20:02:56 +0200 Message-ID: <20230613180259.3525-2-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230613180259.3525-1-Alexander.Steffen@infineon.com> References: <20230613180259.3525-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE821.infineon.com (172.23.29.47) To KLUSE818.infineon.com (172.28.156.171) X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768612382984317677?= X-GMAIL-MSGID: =?utf-8?q?1768612382984317677?= recv_data either returns the number of received bytes, or a negative value representing an error code. Adding the return value directly to the total number of received bytes therefore looks a little weird, since it might add a negative error code to a sum of bytes. The following check for size < expected usually makes the function return ETIME in that case, so it does not cause too many problems in practice. But to make the code look cleaner and because the caller might still be interested in the original error code, explicitly check for the presence of an error code and pass that through. Cc: stable@vger.kernel.org Fixes: cb5354253af2 ("[PATCH] tpm: spacing cleanups 2") Signed-off-by: Alexander Steffen Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_tis_core.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 558144fa707a..aaaa136044ae 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -363,8 +363,13 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) goto out; } - size += recv_data(chip, &buf[TPM_HEADER_SIZE], - expected - TPM_HEADER_SIZE); + rc = recv_data(chip, &buf[TPM_HEADER_SIZE], + expected - TPM_HEADER_SIZE); + if (rc < 0) { + size = rc; + goto out; + } + size += rc; if (size < expected) { dev_err(&chip->dev, "Unable to read remainder of result\n"); size = -ETIME; From patchwork Tue Jun 13 18:02:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 107515 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp767935vqr; Tue, 13 Jun 2023 12:08:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6rWJ50hzl+YvRitOe+qe8S2DF/DOMZvkkbY8KABbGHR3ulVjehr6kOcvfaGZ54wn6GLcEm X-Received: by 2002:a17:907:16a2:b0:978:73af:1bec with SMTP id hc34-20020a17090716a200b0097873af1becmr12367339ejc.33.1686683337384; Tue, 13 Jun 2023 12:08:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686683337; cv=none; d=google.com; s=arc-20160816; b=bs0EZ79zLMWigLtG45wsD2lu53OldLybuOAwBCkFWRbROEStGo5HmYsSN1gwDR0h+Q gPcGMeEf2moZr2isoDGrImLi3Ue8p2Au5Q5leCKd3mhlS2z1tRxp6aFahwqN9kjI1GuN l0kP75TR/yfnxmG7ZkUuKqTpw33oDjN7v8N7KNjFrgwtoZHQ/4nBWzhOPi/g9eXlbP2V IVk2L9vTEaTCBdOBB62wH9Cv+XrrticR4/AgonMAQWLF/6/ebV1WefwKhBHCGAYilnVA egu3CyxAUVYkoYEkOJVtxvEl72cpBYUEr9VXeVjjHvdDATZL3E0ufwYjnzcGRYKhu1en 4xnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=bdDPtBQcnuNviXiDBLtcMzAaWK9mfR4vTsXTkALHIxc=; b=GGfqf+oMWplzp7B1Jg05iPH+KSbyHFUnHuVLBYNZckUaEtdpLHrhzI9r+futMuSK7f +eq+lFiS48sn+vjY4D3Viy49IFj+M367piUbnLgUvAolW87n/PZeGkLlUiUlcoO0qjo9 aBFJmkFSLdbhmfeZUQIxXHvv54MCH6mLWpGOcUeiIG9Q1SU1sfWToocXRLhvR/uucxxV XOXXixKPLd1Mt8B2xj5YJZJzXlwbKLe1TDVgz+ZGgoCmvejOuGuWHtaQ6cOJvj+lJcpN uXlqOmznv+9odeZCNXhi0/7G8E8QrbLd51DvnH1UVx+pa69P3BtVhPZad/3tDhRfEiyn KV1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=JQ0jWuAd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qc11-20020a170906d8ab00b0097896c31122si4238371ejb.663.2023.06.13.12.08.32; Tue, 13 Jun 2023 12:08:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=JQ0jWuAd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239515AbjFMSDW (ORCPT + 99 others); Tue, 13 Jun 2023 14:03:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240084AbjFMSDU (ORCPT ); Tue, 13 Jun 2023 14:03:20 -0400 Received: from smtp11.infineon.com (smtp11.infineon.com [IPv6:2a00:18f0:1e00:4::5]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3861E13E; Tue, 13 Jun 2023 11:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1686679399; x=1718215399; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5pcn4JBKT2FT6yd1+VzPQHvpUKyuNh4EHo//3ud20mE=; b=JQ0jWuAdI90t7G7oOkkrKO4bSiUT81cJ7cfEYlKDst6nfaLQsAlgclCI nwzpEkNLVaK9AVhAx4s5xLZdYg9BpRuFS1LYZrQ50v+RgcivbV9iO5OXQ PaP6GGSK2u+MYRHbP/L76sTzt70UZWLPbS9Iplvg4cJqN3F0ixYLAe8UW 4=; X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="18551330" X-IronPort-AV: E=Sophos;i="6.00,240,1681164000"; d="scan'208";a="18551330" Received: from unknown (HELO MUCSE814.infineon.com) ([172.23.29.40]) by smtp11.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 20:03:17 +0200 Received: from KLUSE818.infineon.com (172.28.156.171) by MUCSE814.infineon.com (172.23.29.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 Received: from ISCNPC0VBFBX.infineon.com (10.161.6.196) by KLUSE818.infineon.com (172.28.156.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH v3 2/4] tpm_tis: Move CRC check to generic send routine Date: Tue, 13 Jun 2023 20:02:57 +0200 Message-ID: <20230613180259.3525-3-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230613180259.3525-1-Alexander.Steffen@infineon.com> References: <20230613180259.3525-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE821.infineon.com (172.23.29.47) To KLUSE818.infineon.com (172.28.156.171) X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768615667119135206?= X-GMAIL-MSGID: =?utf-8?q?1768615667119135206?= The CRC functionality is initialized before tpm_tis_core, so it can be used on all code paths within the module. Therefore, move the CRC check to the generic send routine, that also contains all other checks for successful command transmission, so that all those checks are in one place. Also, this ensures that tpm_tis_ready is called when a CRC failure is detected, to clear the invalid data from the TPM, which did not happen previously. Signed-off-by: Alexander Steffen Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_tis_core.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index aaaa136044ae..5ddaf24518be 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -466,6 +466,12 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len) goto out_err; } + rc = tpm_tis_verify_crc(priv, len, buf); + if (rc < 0) { + dev_err(&chip->dev, "CRC mismatch for command.\n"); + goto out_err; + } + return 0; out_err: @@ -510,12 +516,6 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len) if (rc < 0) return rc; - rc = tpm_tis_verify_crc(priv, len, buf); - if (rc < 0) { - dev_err(&chip->dev, "CRC mismatch for command.\n"); - return rc; - } - /* go and do it */ rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO); if (rc < 0) From patchwork Tue Jun 13 18:02:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 107504 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp741577vqr; Tue, 13 Jun 2023 11:16:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6CkoUu6Qp5sLiEfqYrjdq1ZcFaqtAIl62CVrJNcZOExF7o23wXI+ktZPGUQOoHDkT1odST X-Received: by 2002:a17:902:ecc8:b0:1b3:ee49:8334 with SMTP id a8-20020a170902ecc800b001b3ee498334mr2477487plh.52.1686680205823; Tue, 13 Jun 2023 11:16:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686680205; cv=none; d=google.com; s=arc-20160816; b=skOA+ND2MVxEzfzv8DB0uywZdSso+/j0HpqdHiQolaytKjEk2zKygoxM5dLBbuFikL DKmibjkIlq/l4/ztWqnXjoMm60XfYBvzhI//d9C6SPyfL+ajY78/Jg6dvQ6REFg0PSy6 AjmUvs7TsnH0SQyIips1IGRNw8TRmYPJjF6Xuighlhf/V2tiJU1q1iPOiAMLf5cOE8Y+ cG1dHoLavBQcgx5rC4sYjGZwZHuHOtj+gOE/I0s342Z/pCLBcsEHknch8IXXZ0WNwev0 OcrIq3pveBVrv8iJ4Gulm7IcO0vxJS5TREneMCR05td72sADLorYiToq9X0azv/BPMl1 LwWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=sMa/CqBM0l9BBbaNj5C7lukGZi69bQbBzT6S831Baps=; b=ifcXnfM+1fL5rju3R+H+zB49g+0OkXd7Kvld5y0B1LmLcecHA4UBvJOTfTNuu5EkAJ jZhIHjkeKGd1y6Uqkit/trLRueMTnHLRkBmvbQoWUu7tcFoSCRnh2eCyCmy5joCPr4QU 8AnKX+grJusnpKsb6oVyugsriYHsYo6RNsyLHXu/rOi3zorV0ZdBAx+3LFwW/lzwI/UW uaHZpTbrQT04DmvC0KJ2ZQFqjoUpbhqJUUnE7ghp8Fwsiuc07JDDhja8hkKh79bB2Vy+ uHBF2hLiH13g1E3HhkHnm/b03Syf/drrGRgLru6QTVllLgTxX3CsaGAdieeNDM9/zhp7 5xIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=QC6EqAsJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b5-20020a170902d50500b001b176ba9f0fsi5531140plg.273.2023.06.13.11.16.33; Tue, 13 Jun 2023 11:16:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=QC6EqAsJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240211AbjFMSDc (ORCPT + 99 others); Tue, 13 Jun 2023 14:03:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240112AbjFMSDW (ORCPT ); Tue, 13 Jun 2023 14:03:22 -0400 Received: from smtp14.infineon.com (smtp14.infineon.com [IPv6:2a00:18f0:1e00:4::6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86DD919B3; Tue, 13 Jun 2023 11:03:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1686679401; x=1718215401; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xEMIE6JZW1YN5TsGLns9bWf/BYLfKZwBzKAFxtl7BSA=; b=QC6EqAsJR7gIIMY5u+gEgJoQeKy3iHMmDCKZwIMYqJ1ooUTxC8Z62Qzr pLqpM11frWfI9E+LVvoWFMYoq0Elcj75LpmnCivM6XAVa0a2H/NGKgR0W xRGJ3ZMFK8Wv9B6s1x/oRWrPeLkkvwjqnP5fnF10+gW/J+ZdNdFU/IKnJ o=; X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="16924802" X-IronPort-AV: E=Sophos;i="6.00,240,1681164000"; d="scan'208";a="16924802" Received: from unknown (HELO MUCSE812.infineon.com) ([172.23.29.38]) by smtp14.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 20:03:18 +0200 Received: from KLUSE818.infineon.com (172.28.156.171) by MUCSE812.infineon.com (172.23.29.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 Received: from ISCNPC0VBFBX.infineon.com (10.161.6.196) by KLUSE818.infineon.com (172.28.156.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH v3 3/4] tpm_tis: Use responseRetry to recover from data transfer errors Date: Tue, 13 Jun 2023 20:02:58 +0200 Message-ID: <20230613180259.3525-4-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230613180259.3525-1-Alexander.Steffen@infineon.com> References: <20230613180259.3525-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE821.infineon.com (172.23.29.47) To KLUSE818.infineon.com (172.28.156.171) X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768612383096948233?= X-GMAIL-MSGID: =?utf-8?q?1768612383096948233?= TPM responses may become damaged during transmission, for example due to bit flips on the wire. Instead of aborting when detecting such issues, the responseRetry functionality can be used to make the TPM retransmit its response and receive it again without errors. Signed-off-by: Alexander Steffen Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_tis_core.c | 37 ++++++++++++++++++++++++++------- drivers/char/tpm/tpm_tis_core.h | 1 + 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 5ddaf24518be..a6d1396413a7 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -337,7 +337,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count) return size; } -static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) +static int tpm_tis_try_recv(struct tpm_chip *chip, u8 *buf, size_t count) { struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); int size = 0; @@ -345,11 +345,6 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) u32 expected; int rc; - if (count < TPM_HEADER_SIZE) { - size = -EIO; - goto out; - } - size = recv_data(chip, buf, TPM_HEADER_SIZE); /* read first 10 bytes, including tag, paramsize, and result */ if (size < TPM_HEADER_SIZE) { @@ -382,7 +377,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) goto out; } status = tpm_tis_status(chip); - if (status & TPM_STS_DATA_AVAIL) { /* retry? */ + if (status & TPM_STS_DATA_AVAIL) { dev_err(&chip->dev, "Error left over data\n"); size = -EIO; goto out; @@ -396,10 +391,36 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) } out: - tpm_tis_ready(chip); return size; } +static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) +{ + struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); + unsigned int try; + int rc = 0; + + if (count < TPM_HEADER_SIZE) + return -EIO; + + for (try = 0; try < TPM_RETRY; try++) { + rc = tpm_tis_try_recv(chip, buf, count); + + if (rc == -EIO) + /* Data transfer errors, indicated by EIO, can be + * recovered by rereading the response. + */ + tpm_tis_write8(priv, TPM_STS(priv->locality), + TPM_STS_RESPONSE_RETRY); + else + break; + } + + tpm_tis_ready(chip); + + return rc; +} + /* * If interrupts are used (signaled by an irq set in the vendor structure) * tpm.c can skip polling for the data to be available as the interrupt is diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h index 610bfadb6acf..3a6b600d22ba 100644 --- a/drivers/char/tpm/tpm_tis_core.h +++ b/drivers/char/tpm/tpm_tis_core.h @@ -34,6 +34,7 @@ enum tis_status { TPM_STS_GO = 0x20, TPM_STS_DATA_AVAIL = 0x10, TPM_STS_DATA_EXPECT = 0x08, + TPM_STS_RESPONSE_RETRY = 0x02, TPM_STS_READ_ZERO = 0x23, /* bits that must be zero on read */ }; From patchwork Tue Jun 13 18:02:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 107508 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp752911vqr; Tue, 13 Jun 2023 11:39:12 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4qNebnZNybZH2eL7rqccQKmQE7cdzZXxCQqi6gOvKo0KnuHNWCXOdQJktZcLfweS+7rrte X-Received: by 2002:a05:6a20:e18b:b0:110:2d7f:8eb9 with SMTP id ks11-20020a056a20e18b00b001102d7f8eb9mr11053794pzb.40.1686681551794; Tue, 13 Jun 2023 11:39:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686681551; cv=none; d=google.com; s=arc-20160816; b=mfxIIV2GB0ODuRBIweFf2zmn758vx8QFOQXcVTJPmcavngC9/cncWjoew6uKc/GiP8 BQIGNeOiC3EdGxS1eGhlike6HJk/fMvmu4P8VuyaQ82iS5XREXnbBdUz2Hp9E+TKDle1 USLf2OAh7gC+3ITpGabnMPeJKeLJ5aHjGWMHcfA2hVogXfpE2hpVkja7nysLmSp2tF0K NdTe4Y7nWG6wVsnyJllNVYrLiNCYH1WgtiQmkklCVTj0WF8+Se+rw+UiTJ0cbJnDfzAV z2v6S2ypOihLkvxXNDLLa3RVXeo+3EuhP19N8LS3ed0SQuLMNDd0jhiKvbr7o3il/ta7 nptQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=cZuzk646xfwwM6zL0A29RiSgoLgKkAamheB+Pt3s1Tg=; b=ze7EapKTAkvdsM6twW8ixAR39bR6zll/o1p6k+iOVWY5ZfFlfOHbW2fs9zV4XXtw+S 7BBKXb5NY2t5X15nQfMeI3ihJ1OzCFb8B3le/k2AMVw0k6dFWvfcbEszaC+0Wxm/KfQ4 k1SwgsE/jcZ2h5ftmMVrMvKxazPYBeZA5IaJhEQWj0WUCtRVWIzoM0FEOY0udzXf6Mav JYbdCzTLWIxGYdyB2weqEsYFvb32HwPXQVdFqO4XYB7S6h/Z8OuHkj3Zhn2PSsvqbI/9 y7jpn6Q7dAoHp6EzOyuY1D7MGWHy/tM8/5OStQtr0pui6DAW0tEcWSwNqqCfYY+6ZtUt uqLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=a4syogty; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k11-20020a637b4b000000b00543f6a35a43si6132274pgn.306.2023.06.13.11.38.55; Tue, 13 Jun 2023 11:39:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=a4syogty; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239426AbjFMSD0 (ORCPT + 99 others); Tue, 13 Jun 2023 14:03:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47742 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240119AbjFMSDU (ORCPT ); Tue, 13 Jun 2023 14:03:20 -0400 Received: from smtp2.infineon.com (smtp2.infineon.com [IPv6:2a00:18f0:1e00:4::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3945810F7; Tue, 13 Jun 2023 11:03:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1686679399; x=1718215399; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6JLgbkkYt1U63xIpmUAgRDi0lykGOmT7an3pZEBkGhI=; b=a4syogtyV87Ts+C5WVfVPecZkk6xHPOfdnNeFbm4IXkxR8M5TR00gvhy FjWby6K6R5L0kiT++aQYVuvfu4IMlHG+qT7IkWq3a/GA1MCAvEzRRjge1 NzlWxwyoq5DL0/8uJEI1wGPMCWbpO5EUMTPF+CddEQU8uRHZPzs3+CZ8W E=; X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="41820531" X-IronPort-AV: E=Sophos;i="6.00,240,1681164000"; d="scan'208";a="41820531" Received: from unknown (HELO MUCSE805.infineon.com) ([172.23.29.31]) by smtp2.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 20:03:17 +0200 Received: from KLUSE818.infineon.com (172.28.156.171) by MUCSE805.infineon.com (172.23.29.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:17 +0200 Received: from ISCNPC0VBFBX.infineon.com (10.161.6.196) by KLUSE818.infineon.com (172.28.156.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Tue, 13 Jun 2023 20:03:16 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH v3 4/4] tpm_tis: Resend command to recover from data transfer errors Date: Tue, 13 Jun 2023 20:02:59 +0200 Message-ID: <20230613180259.3525-5-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230613180259.3525-1-Alexander.Steffen@infineon.com> References: <20230613180259.3525-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE821.infineon.com (172.23.29.47) To KLUSE818.infineon.com (172.28.156.171) X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768613794682986311?= X-GMAIL-MSGID: =?utf-8?q?1768613794682986311?= Similar to the transmission of TPM responses, also the transmission of TPM commands may become corrupted. Instead of aborting when detecting such issues, try resending the command again. Signed-off-by: Alexander Steffen Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_tis_core.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index a6d1396413a7..7b13ad4bd6dd 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -532,10 +532,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len) int rc; u32 ordinal; unsigned long dur; + unsigned int try; - rc = tpm_tis_send_data(chip, buf, len); - if (rc < 0) - return rc; + for (try = 0; try < TPM_RETRY; try++) { + rc = tpm_tis_send_data(chip, buf, len); + if (rc >= 0) + /* Data transfer done successfully */ + break; + else if (rc != -EIO) + /* Data transfer failed, not recoverable */ + return rc; + } /* go and do it */ rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO);