From patchwork Mon Jun 5 17:52:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 103409 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp2860737vqr; Mon, 5 Jun 2023 11:02:27 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7h8r6C1vuFe2ywR74JK04+z+vlwfA+GUw+fBhV8IaETA/waaN67VTc/P4Sa93cP9tT2U5Z X-Received: by 2002:a05:6a21:9988:b0:10b:8a27:bb59 with SMTP id ve8-20020a056a21998800b0010b8a27bb59mr5021738pzb.47.1685988146772; Mon, 05 Jun 2023 11:02:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685988146; cv=none; d=google.com; s=arc-20160816; b=xabDqZbDvL4y4+fAqB61Sqs0nFjdjfI7CpkD+gonkxMei+Jckh0Z1WVYXLzEU0NknC Vb3qnuuGs5E6rqBRqImAHdM3bnPGmma+XrEYRz8mDFfkqR+4t/2V7AHPw9NjIKObhbdi 2lvj8XOUBMtra0bvtjXiqoshjgDHX0RtXgYTtsOyDfsYSHZW4eLKBGXhPwCK4fXa0XIb mqE4hDiuHyjswoouby9iNHkPVQkStVm5FslOO/NL+kiZFB2Xc3EF5vXb1ArJK/XZdVPK CBwxGuBzFtyR+GyRSghr9j40UKHnzlMZiPCVPltOlla+l4YNVFTbz/f2hV4x+/k6WsDv 5iHg== 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=dBGZeEYdkTm3ANHKfBq4PB4RQ0alOFfFcDbeccpyrM0=; b=HJgzx/UKGXNy67vyl4HVVWVJB2pZWoNm+lxn1eFw8WBZlE9Lia6ny1o1BwXsA/4J6J fnjO0BS4mEH/xQwYz7Hr5JSidmCpficRM5swCx5OspzxiNtqWRDdT/KDMIbuMdNBE9Xd BzUir7+wl1TZvgFgiqodveGfAtW/W+fo/z+5wj6iRD5eOxs4wp3pFr0nZyZHcwc7gQX6 +uibkWkqB5zdmIzlOl0ouQ/WqM1An4LEntcbZeC3Uu3gNc6QX/+cXAscZooGdyLdaH/j 5PWKnBW+LMogX/w/bHFvtc8dD62rogfZrRJxFUiM+gV02wMLsyHz1lJ3gzgVstRwRIRo 9P6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=ln13UZZc; 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 l7-20020a63be07000000b005303a26dbf8si5594274pgf.408.2023.06.05.11.02.10; Mon, 05 Jun 2023 11:02:26 -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=ln13UZZc; 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 S235153AbjFERxf (ORCPT + 99 others); Mon, 5 Jun 2023 13:53:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57512 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235187AbjFERx2 (ORCPT ); Mon, 5 Jun 2023 13:53:28 -0400 Received: from smtp11.infineon.com (smtp11.infineon.com [IPv6:2a00:18f0:1e00:4::5]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B279100; Mon, 5 Jun 2023 10:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1685987607; x=1717523607; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=v9H0eyeHOdjewny8tzzedWjAUOkDdFz5OOsBgwYf/hM=; b=ln13UZZc9v+A3SRds2Y6QsIrFJxYaAQ9U9QlYLX31r2Oh5e2PVuKEx+r Wd655OUxB3/HBPeO96/eC/vG4DCbF4d3PTCXE0iXyPxM9gS1r7mMdvoRz J/VM4E9MrfPC04KPXaJF9hOrQhiML6c3EOazBvnBsJFKMS6ggVrtvtf0W I=; X-IronPort-AV: E=McAfee;i="6600,9927,10732"; a="17446197" X-IronPort-AV: E=Sophos;i="6.00,218,1681164000"; d="scan'208";a="17446197" Received: from unknown (HELO MUCSE814.infineon.com) ([172.23.29.40]) by smtp11.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jun 2023 19:53:24 +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; Mon, 5 Jun 2023 19:53:24 +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; Mon, 5 Jun 2023 19:53:23 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH 1/4] tpm_tis: Explicitly check for error code Date: Mon, 5 Jun 2023 19:52:47 +0200 Message-ID: <20230605175250.2055-2-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230605175250.2055-1-Alexander.Steffen@infineon.com> References: <20230605175250.2055-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE817.infineon.com (172.23.29.43) 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 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?1767886707182900774?= X-GMAIL-MSGID: =?utf-8?q?1767886707182900774?= 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. Change-Id: I5a310daaa71f0acaaf7fff62cadd79d5edaa9207 Signed-off-by: Alexander Steffen --- 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 Mon Jun 5 17:52:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 103427 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp2873892vqr; Mon, 5 Jun 2023 11:23:56 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6ywQHr4vHfmyS/3SUtYIMkIWRTMMs5cc9Yt0n0lCluWSu9QaMIAxuGlC5iUvUzE5TOiicS X-Received: by 2002:a17:90a:408b:b0:256:b8f0:d504 with SMTP id l11-20020a17090a408b00b00256b8f0d504mr3980334pjg.24.1685989436504; Mon, 05 Jun 2023 11:23:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685989436; cv=none; d=google.com; s=arc-20160816; b=TBv7ayVHDHSk/jtAaaNZdxBhFwSc1x35BGyZT5ATANTGj6PdNPD7R4bm6hNF6umETG wG/CFx+1nB7iwie+L0JHjJMgyxDPraEciN0i+aL/ooP9SsO1gIn23WWbq1UTvmn7+HZM tRM4NSWxFglgIqGQLU94h7pZwWmx+AEgyWoAfzpviA7XH9bFbud31F5wYOBpGH62iqUE rBBO0xD+JgZlEGn6i0/2fCrfRjjDsw1POF9J8iPdSlZ12OA0svq1G1sRyh/+7iscaFhy MyrcoUF+c11M3ekzeLRgi7RlqPL98OG6e+jh5q/Q3F/Qxwrk/zrPM3E402WUhzhY2TmC wIJQ== 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=dxmaVk91nxSLP3FeuychaXlT1lPUBGA5DJMnXDraWN4=; b=pQ4bQDKvYKrC23hegwGJZxs7q3Q9J8L2dObQRM+ajSVt91RsoItYz8U0LECXRT1zif /YujDGsPp2LEHqao2cFqcwHisjsjQ0ee4uOhhjSGnYihpAiNqaEdsDS+WlqjR8TnALnA RiEOc/ulfxHlHsdEBJS8iOQcFe/ANJ+UiNCDRTL5L4ZKVXsLzNz8aCFAEBNiqL5sohIE yByOlGykV+KAil5FLeG9mDqNBS0LqVXBuotA/PMErvO+qKyNqxJg23MQ+JzwRArHIAZs JXmSJeTBr8nN1AEzW0P3m8kFEL6NKbWO0g2f1TkXlkSf/0K5sRF6C9lSlpYcPe7Sv5eK FfXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=n87eyRq7; 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 15-20020a17090a190f00b00252ad7ab4a5si7744826pjg.5.2023.06.05.11.23.44; Mon, 05 Jun 2023 11:23:56 -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=n87eyRq7; 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 S235383AbjFERxb (ORCPT + 99 others); Mon, 5 Jun 2023 13:53:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234584AbjFERx2 (ORCPT ); Mon, 5 Jun 2023 13:53:28 -0400 Received: from smtp2.infineon.com (smtp2.infineon.com [IPv6:2a00:18f0:1e00:4::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 946DAD3; Mon, 5 Jun 2023 10:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1685987607; x=1717523607; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qnXdKp0XxJiBddmgvvjVvqWfVgIMwaT9ivNZNQ/2ryI=; b=n87eyRq7cJC9duI2iiK84uzQjtaX8h49oKarsKiOufqx5C+EfbHQTugS bAALTSrXQm+5qt1mpaWzwxIYV9ff1IUpFgRei9ssYp1YQsLh+BrlnVyko QyNwLbVPG4Car78TVtXHIq5nFNhakS4e/gVndFNXbkBtLYwM9FchZuaav o=; X-IronPort-AV: E=McAfee;i="6600,9927,10732"; a="40772631" X-IronPort-AV: E=Sophos;i="6.00,218,1681164000"; d="scan'208";a="40772631" Received: from unknown (HELO MUCSE812.infineon.com) ([172.23.29.38]) by smtp2.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jun 2023 19:53:25 +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; Mon, 5 Jun 2023 19:53:24 +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; Mon, 5 Jun 2023 19:53:23 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH 2/4] tpm_tis: Move CRC check to generic send routine Date: Mon, 5 Jun 2023 19:52:48 +0200 Message-ID: <20230605175250.2055-3-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230605175250.2055-1-Alexander.Steffen@infineon.com> References: <20230605175250.2055-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE817.infineon.com (172.23.29.43) 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 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?1767888059372565658?= X-GMAIL-MSGID: =?utf-8?q?1767888059372565658?= 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. Change-Id: I334abe9accc45efa679e23d391705322886bd0e3 Signed-off-by: Alexander Steffen --- 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 Mon Jun 5 17:52:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 103421 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp2870371vqr; Mon, 5 Jun 2023 11:17:24 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5eYibXqTVblIlGJrmJ3VMs+PxhJesBpq+BeEI4hVnlpYisPKI2WqXOGnugxi9kmtd1pinv X-Received: by 2002:a05:6a00:1aca:b0:63f:120a:1dc3 with SMTP id f10-20020a056a001aca00b0063f120a1dc3mr647409pfv.0.1685989044518; Mon, 05 Jun 2023 11:17:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685989044; cv=none; d=google.com; s=arc-20160816; b=sQwTDxq4A5e/TpgYqfS2+yR/JLZ5ZX9hzHJcmtDK7Xby2beu8aUWlYZiVyVnjL1oPU MYdu7W+rMdk5EaJlht1evlC01taI6tbK9LdSSVFcr2U7uvlpHWbinFNqIg8fpIvqyt8u 6Y7/0mV8yduDMgnZ6Zgn5VWsVV75T5bQ8c1Ng0iQOfwiQaLkoxB2TBunKz6Xlhj+Saj4 6kjaD7Pi4VLGQPMrb+Gdedu6DywADnmMrdbeECcf9KFz0WPXaebD9ydLJhc79jqfw4jP 567skU9tNKWmvrXPGGSWb9Nb8UUMFCVq5yKPOkgXd1EEPMLN5FzPV7nWBdnYdw2nt8nG CSUg== 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=Vtur6RTX0flroJ/eNGaR78Q7yyUnF0gnVbaZQql8MGs=; b=fni8aw/0/zXDU//MbeTRikpWzk918i5od4U5WUoYO+BnAym15Dvqkg/nl8vrFOWmXX Wgwl4PtPESvfkR37fwClLHXgkQdpbW72wmnepKoX5LYTP0f382/E+v1HaW0E3qxI6m+q vDfCUQoIiwwQJ0MrAJASiYtJ5UZk32DvExyeQSM/gN6UoJFDblEPG0TjyfBO3w77IhzY rqqa5YKl9ct+4DuJByuiK3Jrpw0kj6Ntjkn455nryu+NYj2qySeNBQFWA3h0eGvtccFN S7wa7S+scCsK9TanwwxveAY3yQ8+p1G+MyuaAP/ntbf/cHebUTGzObPcNIzrsS+pQBAW w9WA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=T5j7KHWh; 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 n18-20020aa79852000000b006569793597esi3394879pfq.316.2023.06.05.11.17.10; Mon, 05 Jun 2023 11:17:24 -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=T5j7KHWh; 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 S235464AbjFERxl (ORCPT + 99 others); Mon, 5 Jun 2023 13:53:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235314AbjFERxa (ORCPT ); Mon, 5 Jun 2023 13:53:30 -0400 Received: from smtp2.infineon.com (smtp2.infineon.com [IPv6:2a00:18f0:1e00:4::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05A4D10B; Mon, 5 Jun 2023 10:53:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1685987610; x=1717523610; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QhugzGSrT0hfnugDbYqjGfVx3bVGA7aZy3nl5v+JSRM=; b=T5j7KHWhze+ABe1QOOI68YfYkVWKI4XoPaKuXPLZBoVfZhtzLelJYKBl QoJKxiZK56wSUoukftVm6KovpjyyzlYEJeCVv9NfFaBlRazjjRIv0m8Jw 9mvMEIein0omDcqPSzU8WLlMoSkUyeyn5cuAv3otOZTD4pKopMLkFj2Pb Q=; X-IronPort-AV: E=McAfee;i="6600,9927,10732"; a="40772632" X-IronPort-AV: E=Sophos;i="6.00,218,1681164000"; d="scan'208";a="40772632" Received: from unknown (HELO MUCSE805.infineon.com) ([172.23.29.31]) by smtp2.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jun 2023 19:53:25 +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; Mon, 5 Jun 2023 19:53:24 +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; Mon, 5 Jun 2023 19:53:24 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH 3/4] tpm_tis: Use responseRetry to recover from data transfer errors Date: Mon, 5 Jun 2023 19:52:49 +0200 Message-ID: <20230605175250.2055-4-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230605175250.2055-1-Alexander.Steffen@infineon.com> References: <20230605175250.2055-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE817.infineon.com (172.23.29.43) 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 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?1767887648081537794?= X-GMAIL-MSGID: =?utf-8?q?1767887648081537794?= 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. Change-Id: Ifb9fa8bf2106fed6f3dfc9fae935e0bbd30d117f Signed-off-by: Alexander Steffen --- drivers/char/tpm/tpm_tis_core.c | 40 ++++++++++++++++++++++++++------- drivers/char/tpm/tpm_tis_core.h | 1 + 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 5ddaf24518be..a08768e55803 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -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,39 @@ 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_with_retries(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) { + rc = -EIO; + goto out; + } + + for (try = 0; try < TPM_RETRY; try++) { + rc = tpm_tis_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; + } + } + +out: + 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 @@ -986,7 +1010,7 @@ static void tpm_tis_clkrun_enable(struct tpm_chip *chip, bool value) static const struct tpm_class_ops tpm_tis = { .flags = TPM_OPS_AUTO_STARTUP, .status = tpm_tis_status, - .recv = tpm_tis_recv, + .recv = tpm_tis_recv_with_retries, .send = tpm_tis_send, .cancel = tpm_tis_ready, .update_timeouts = tpm_tis_update_timeouts, diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h index e978f457fd4d..8458cd4a84ec 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 Mon Jun 5 17:52:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 103425 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp2872928vqr; Mon, 5 Jun 2023 11:22:04 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4f5NtZBuihuKKTf9TmVF8u+8dC+9hdbDcI70o5pucNeOeNHFg6kqFXqclAvnWZOeNpMs/9 X-Received: by 2002:a17:902:f681:b0:1b1:fbb5:baed with SMTP id l1-20020a170902f68100b001b1fbb5baedmr2410486plg.38.1685989324560; Mon, 05 Jun 2023 11:22:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685989324; cv=none; d=google.com; s=arc-20160816; b=CapDo7wymX/z2BsmSjuee6h4xQTZyVL1ylRDBY4g0U7FD7NqmKOO2tm39IvNtpGEtB EMSw/lBlmOH/U2ePLKW+ytVlrckT+yzXxM3RR7URoEO0mx3VFngbuDTOFil8OGXfFzNP igGk/o11X3tx2oNlyVNugyMmHnvaKJMUAAYlHc4RMW+p/FwdH5oKWZtyo93keEgyJ+FV /XSwGDKnEjBUbpX9xUYdk4P1rLJr7TXCHcD0JzGcGoSNhg76V0b46cr0GRtHp/omnrUU 3J6b/UyAWB07VtMMRuhPKjtVgBSk53yPTMamMI2y3YbP8L1Orhz6AnDcSIB1M4lSIC89 BEEA== 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=i6ooLTqpPLl06XKowuhTshueICyYQXgNGH4MTZejt2k=; b=D0C0KZDxj2TO1fOowOUmzNXRDKcPzXmd/cq98Hpoq7zBJrka0g9D3xbf0z4Z5pRDZc hCmzWyewTcXamJUBY0KmqdKXXdDKBwGpDYP6mnZ7aKvqfjqIJFAycggKPVE2jZbIYU25 TmS4gRP2tGp9qnRlgCAyQYk4fh0l++7x2e6+vTCm3bcOHM+RYcNAbGK0h9EVDIy1NwNH QHmIDg5ZrrpGbfF/EBXbgdxppRVmoxDfLjlGmtDRRwSefXnh5At4mYhVAwP9ZooQyuxF 74ho1Snc+2eDqUndvt9cbZrEPGvNj4IXVREOUvyU7TNgjhFVz8TUYQ67sCF5Fckt9eWF MtqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=IDUj6MFS; 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 w5-20020a1709029a8500b001a920be2722si5655392plp.610.2023.06.05.11.21.51; Mon, 05 Jun 2023 11:22:04 -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=IDUj6MFS; 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 S235475AbjFERxi (ORCPT + 99 others); Mon, 5 Jun 2023 13:53:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231866AbjFERx3 (ORCPT ); Mon, 5 Jun 2023 13:53:29 -0400 Received: from smtp11.infineon.com (smtp11.infineon.com [IPv6:2a00:18f0:1e00:4::5]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A500109; Mon, 5 Jun 2023 10:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1685987607; x=1717523607; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HwC2Jb0kxHE1+xykN93sfn2LkkNfwVz71nFqYVx0hjc=; b=IDUj6MFS+rV/RwJtp60MY5vu3xEqHXJOxNr62341PwmWWGV9DsVIlloV uf0Mpd3RiP3q88JJHKTwX+jLdsAxntM7j86ERJlj4ujh/zCKy1NbjIkcI 3mFfGE/UxvdS9YmOgWpJ62z+XNtij+rObisrGcnRUxfBEu/LTKEbESrMf I=; X-IronPort-AV: E=McAfee;i="6600,9927,10732"; a="17446198" X-IronPort-AV: E=Sophos;i="6.00,218,1681164000"; d="scan'208";a="17446198" Received: from unknown (HELO MUCSE803.infineon.com) ([172.23.29.29]) by smtp11.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jun 2023 19:53:25 +0200 Received: from KLUSE818.infineon.com (172.28.156.171) by MUCSE803.infineon.com (172.23.29.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Mon, 5 Jun 2023 19:53:25 +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; Mon, 5 Jun 2023 19:53:24 +0200 From: Alexander Steffen To: , , CC: Alexander Steffen Subject: [PATCH 4/4] tpm_tis: Resend command to recover from data transfer errors Date: Mon, 5 Jun 2023 19:52:50 +0200 Message-ID: <20230605175250.2055-5-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20230605175250.2055-1-Alexander.Steffen@infineon.com> References: <20230605175250.2055-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [10.161.6.196] X-ClientProxiedBy: MUCSE817.infineon.com (172.23.29.43) 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 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?1767887941749190288?= X-GMAIL-MSGID: =?utf-8?q?1767887941749190288?= 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. Change-Id: Ifad9cccff94b59242d36fba9c1e92c7a6bb57804 Signed-off-by: Alexander Steffen --- drivers/char/tpm/tpm_tis_core.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index a08768e55803..47073cc79b51 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -535,10 +535,18 @@ 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);