Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2738226pxv; Mon, 12 Jul 2021 00:19:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx+jfWJDwoCh4HEgdapzbBNHPedkXStMV143rl/Y8fFzdMGePzP78x9+IKuJ8IjfJuMWtwa X-Received: by 2002:a05:6e02:1d9c:: with SMTP id h28mr26743844ila.25.1626074389469; Mon, 12 Jul 2021 00:19:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626074389; cv=none; d=google.com; s=arc-20160816; b=AZvbZp61Afek5yGDHZ36qb7tvKihiIO6SEbbVlIRh7zxnXKkh66J41HU98/kF3B6Do KTMzvHjfKaIcol0RpEW8jPOPDPOpds5M7vqpcqDesLaj/RQwc4DlOm1tT0Ypfe57jGoe QpQGaHMthi0hyLN7ejfgogsI2gWWyMjZY5dmEZOfCG1HF+mcc5VjVY7j8BmLAi26IlST RUi91breipa1/zKJZmIOMQIKHq1uCgsduqb3a2yqPZt5Pn82akIyzv8+VYV8vCNrIubJ BS/Cy36UcGibLBduPOLbf3osvZGp8tpWDkgC6bKD8B+5PkFvmKUZ6iwm1APRqv0S1+Wq i2pg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=O8Z5RcXfy1H+L29dgosSuLEl7WYANgCFoF7/MUyrIRI=; b=ea+RzrjLOVIgylvqa9QUG9TJnkRoHuXdW1X/u+kWjDxwYuxZ402DBhZDEkOysvgk30 /RUYMCDVgwdTIivqfDkYjilgCH2X/6Q4FfTRY25/j2Md3appCH0QhPOpq8U9TbvYfdOG hOeTn4SAb75VBZxA2nY1a+/1hp5P7PQ1u9Qu9idH6J8+pM9cHN/SAJ3PLEfKjf0Rs9JB aPRnS05CVLrUzi5c9Zv/HYD+We435vKdNQYI+HToIr5TAmg27POSzJEVd6UM91nIcUSN PhIKAgyRpTyy88ZPU7naDFWUSEa0wjUxJIfAw0qrcbnsAe1wdw3V/b/4bQYudfxB+XlR 0IYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=jZuNuY7c; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s13si18660288jaj.54.2021.07.12.00.19.38; Mon, 12 Jul 2021 00:19:49 -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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=jZuNuY7c; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245687AbhGLHTq (ORCPT + 99 others); Mon, 12 Jul 2021 03:19:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:54080 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241053AbhGLGyc (ORCPT ); Mon, 12 Jul 2021 02:54:32 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 707236052B; Mon, 12 Jul 2021 06:51:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626072703; bh=vbIdOpqykdVZ+lcvBjxFFpJ7AefLJLkRFPmxWAZWWuU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jZuNuY7cfI1z1RgL+vPq09bF8/UnCf5xfF/D3sTsRRW57x884iqNaIkey4rppd4/Q A3xm0Djru7rz0h3PP5XY+Az2LThzembOtSKxTArB1/lL/FG+uIjQP0yV6Rro+IVC8Z pRqOzKeFu1bjzOXREKQIfZOygvXZCaiGepEPtBFE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jarkko Sakkinen Subject: [PATCH 5.10 586/593] tpm: Replace WARN_ONCE() with dev_err_once() in tpm_tis_status() Date: Mon, 12 Jul 2021 08:12:26 +0200 Message-Id: <20210712060959.956214196@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@linuxfoundation.org> User-Agent: quilt/0.66 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: Jarkko Sakkinen commit 0178f9d0f60ba07e09bab57381a3ef18e2c1fd7f upstream. Do not tear down the system when getting invalid status from a TPM chip. This can happen when panic-on-warn is used. Instead, introduce TPM_TIS_INVALID_STATUS bitflag and use it to trigger once the error reporting per chip. In addition, print out the value of TPM_STS for improved forensics. Link: https://lore.kernel.org/keyrings/YKzlTR1AzUigShtZ@kroah.com/ Fixes: 55707d531af6 ("tpm_tis: Add a check for invalid status") Cc: stable@vger.kernel.org Signed-off-by: Jarkko Sakkinen Reviewed-by: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman --- drivers/char/tpm/tpm_tis_core.c | 25 ++++++++++++++++++------- drivers/char/tpm/tpm_tis_core.h | 3 ++- 2 files changed, 20 insertions(+), 8 deletions(-) --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -196,13 +196,24 @@ static u8 tpm_tis_status(struct tpm_chip return 0; if (unlikely((status & TPM_STS_READ_ZERO) != 0)) { - /* - * If this trips, the chances are the read is - * returning 0xff because the locality hasn't been - * acquired. Usually because tpm_try_get_ops() hasn't - * been called before doing a TPM operation. - */ - WARN_ONCE(1, "TPM returned invalid status\n"); + if (!test_and_set_bit(TPM_TIS_INVALID_STATUS, &priv->flags)) { + /* + * If this trips, the chances are the read is + * returning 0xff because the locality hasn't been + * acquired. Usually because tpm_try_get_ops() hasn't + * been called before doing a TPM operation. + */ + dev_err(&chip->dev, "invalid TPM_STS.x 0x%02x, dumping stack for forensics\n", + status); + + /* + * Dump stack for forensics, as invalid TPM_STS.x could be + * potentially triggered by impaired tpm_try_get_ops() or + * tpm_find_get_ops(). + */ + dump_stack(); + } + return 0; } --- a/drivers/char/tpm/tpm_tis_core.h +++ b/drivers/char/tpm/tpm_tis_core.h @@ -83,6 +83,7 @@ enum tis_defaults { enum tpm_tis_flags { TPM_TIS_ITPM_WORKAROUND = BIT(0), + TPM_TIS_INVALID_STATUS = BIT(1), }; struct tpm_tis_data { @@ -90,7 +91,7 @@ struct tpm_tis_data { int locality; int irq; bool irq_tested; - unsigned int flags; + unsigned long flags; void __iomem *ilb_base_addr; u16 clkrun_enabled; wait_queue_head_t int_queue;