Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp565523pxb; Thu, 21 Oct 2021 05:20:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyIxijscEJ9Z6K0s4c7IB235wxOnbTMw9oiNXSh7u3VVWHM4YQpJzYGkukkXrXBDFInKhOv X-Received: by 2002:a05:6a00:1592:b0:44d:db91:ff84 with SMTP id u18-20020a056a00159200b0044ddb91ff84mr5571278pfk.45.1634818800021; Thu, 21 Oct 2021 05:20:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634818800; cv=none; d=google.com; s=arc-20160816; b=Ud5ufB6g5w2jHcvCbwHLkFTHv7wF0cPw0DyIHjORelCa17mBwAfGidwR5L6/s7V3Ww +++sRCwsbwSN9kZ6TZumQEUB76h5FkAxV5nppl+iTxu5HQjO55T10ZZrkrsCav0xQfAs vxHLTch8NMzuFGxWA5krZzrYR/C8HV4djWespU3dcDZdIRD7+oUYvCUZM9LXOXmnT0Kl 49yKATG/vglKTmMcO7Kxl/YjRYeeYaB7h2FnXH4kNj3J4LL9RVyCvjGcIkeVPew4Z0gg tzzYpPgRJNDQmYDa/rgM/WmWSzhsFuzyo1kkV3iE8Cgk2rg54PgNncWK5/ZlirYKVgau S2Sg== 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; bh=uj5+qK8mKxLaUMff7b2WRe4ESBZHD61zbk+BvDwMm6Y=; b=e8Yv0IanJ2XrU7Rtj3riaEPXDM/84gMDOMz2fcADclbf+NP5LXNH633HQ0H0gmoLti 0kSOINJ7zJNewnhYtq3XFhV0FzG5kpLAm3+KUN1XY1MU7Db1EflKT1idfPurIuECmEtx dg9jmFbUE1Me29NEJPrUiadnseAkWMZ1SzX7YoLlMGwz6q+wZK3XU/Ok9lw2feWH5iGH eNpyYavsFK7/WB3mrjVg4ZuVYYQR7H8UillPu+Z5/fDs8BnOeChKGpa8YSs/CjhnDm7T jos1cavCMFkgVwzPKOyY3Iij80tQUtiHsWYLUnn+bwkCrTkxcYcL9UxOrxNTJCZqLa0m zeYQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p15si9555365pfh.253.2021.10.21.05.19.47; Thu, 21 Oct 2021 05:20:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231659AbhJUMU7 (ORCPT + 99 others); Thu, 21 Oct 2021 08:20:59 -0400 Received: from 212.199.177.27.static.012.net.il ([212.199.177.27]:45859 "EHLO herzl.nuvoton.co.il" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S231510AbhJUMU5 (ORCPT ); Thu, 21 Oct 2021 08:20:57 -0400 X-Greylist: delayed 549 seconds by postgrey-1.27 at vger.kernel.org; Thu, 21 Oct 2021 08:20:34 EDT Received: from taln60.nuvoton.co.il (ntil-fw [212.199.177.25]) by herzl.nuvoton.co.il (8.13.8/8.13.8) with ESMTP id 19LC7ag4003263; Thu, 21 Oct 2021 15:07:36 +0300 Received: by taln60.nuvoton.co.il (Postfix, from userid 10140) id 6689B63A1D; Thu, 21 Oct 2021 15:07:47 +0300 (IDT) From: amirmizi6@gmail.com To: Eyal.Cohen@nuvoton.com, jarkko@kernel.org, oshrialkoby85@gmail.com, alexander.steffen@infineon.com, robh+dt@kernel.org, mark.rutland@arm.com, peterhuewe@gmx.de, jgg@ziepe.ca, arnd@arndb.de, gregkh@linuxfoundation.org, benoit.houyere@st.com, eajames@linux.ibm.com, joel@jms.id.au Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, oshri.alkoby@nuvoton.com, tmaimon77@gmail.com, gcwilson@us.ibm.com, kgoldman@us.ibm.com, Dan.Morav@nuvoton.com, oren.tanami@nuvoton.com, shmulik.hager@nuvoton.com, amir.mizinski@nuvoton.com, Amir Mizinski Subject: [PATCH v16 4/6] tpm: tpm_tis: verify TPM_STS register is valid after locality request Date: Thu, 21 Oct 2021 15:05:55 +0300 Message-Id: <20211021120557.69234-5-amirmizi6@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20211021120557.69234-1-amirmizi6@gmail.com> References: <20211021120557.69234-1-amirmizi6@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Amir Mizinski This issue could occur when the TPM does not update TPM_STS register after a locality request (TPM_STS Initial value = 0xFF) and a TPM_STS register read occurs in the tpm_tis_status(chip) function call. When a call to tpm_tis_send_data() function is made after a request_locality() call, the condition ("if ((status & TPM_STS_COMMAND_READY) == 0)") is checked. At this moment if the status value is 0xFF, then it is considered, wrongly, in “ready” state (by checking only one bit). However, at this moment the TPM is, in fact, in "Idle" state and remains in "Idle" state because "tpm_tis_ready(chip);" was not executed. Waiting for the condition TPM_STS.tpmGo == 0, will ensure that the TPM status register has the correct value. Suggested-by: Benoit Houyere Signed-off-by: Amir Mizinski --- drivers/char/tpm/tpm_tis_core.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 3e60072..7525cf0 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -177,8 +177,14 @@ static int request_locality(struct tpm_chip *chip, int l) } else { /* wait for burstcount */ do { - if (check_locality(chip, l)) + if (check_locality(chip, l)) { + if (wait_for_tpm_stat(chip, TPM_STS_GO, 0, + chip->timeout_c, + &priv->int_queue, + false) < 0) + return -ETIME; return l; + } tpm_msleep(TPM_TIMEOUT); } while (time_before(jiffies, stop)); } -- 2.7.4