linux-integrity.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt()
@ 2021-05-10 12:28 Jarkko Sakkinen
  2021-05-10 12:28 ` [PATCH 2/2] tpm, tpm_tis: Reserve locality in tpm_tis_resume() Jarkko Sakkinen
  2021-05-10 23:09 ` [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Lino Sanfilippo
  0 siblings, 2 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2021-05-10 12:28 UTC (permalink / raw)
  To: linux-integrity
  Cc: Jarkko Sakkinen, Hans de Goede, stable, Lino Sanfilippo,
	Peter Huewe, Jason Gunthorpe, James Bottomley, Stefan Berger,
	Jerry Snitselaar

The earlier fix (linked) only partially fixed the locality handling bug
in tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.

Extend the locality handling to cover TPM2.

Cc: Hans de Goede <hdegoede@redhat.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/linux-integrity/20210220125534.20707-1-jarkko@kernel.org/
Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
Reported-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
---

v1:
* Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.

 drivers/char/tpm/tpm_tis_core.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index a2e0395cbe61..6fa150a3b75e 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)
 	cap_t cap;
 	int ret;
 
-	/* TPM 2.0 */
-	if (chip->flags & TPM_CHIP_FLAG_TPM2)
-		return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
-
-	/* TPM 1.2 */
 	ret = request_locality(chip, 0);
 	if (ret < 0)
 		return ret;
 
-	ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
+	if (chip->flags & TPM_CHIP_FLAG_TPM2)
+		ret = tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
+	else
+		ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
 
 	release_locality(chip, 0);
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] tpm, tpm_tis: Reserve locality in tpm_tis_resume()
  2021-05-10 12:28 [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Jarkko Sakkinen
@ 2021-05-10 12:28 ` Jarkko Sakkinen
  2021-05-10 23:09 ` [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Lino Sanfilippo
  1 sibling, 0 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2021-05-10 12:28 UTC (permalink / raw)
  To: linux-integrity
  Cc: Jarkko Sakkinen, Hans de Goede, Lino Sanfilippo, stable,
	Peter Huewe, Jason Gunthorpe, Stefan Berger, James Bottomley,
	Jerry Snitselaar

Reserve locality in tpm_tis_resume(), as it could be unsert after waking
up from a sleep state.

Reported-by: Hans de Goede <hdegoede@redhat.com>
Cc: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Cc: stable@vger.kernel.org
Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
---

v1:
* Testing done with Intel NUC5i5MYHE containing SLB9665 TPM 2.0 chip.
* The used test case: "echo mee | sudo tee /sys/power/state" executed
  without issues.

 drivers/char/tpm/tpm_tis_core.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index 6fa150a3b75e..55b9d3965ae1 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -1125,12 +1125,20 @@ int tpm_tis_resume(struct device *dev)
 	if (ret)
 		return ret;
 
-	/* TPM 1.2 requires self-test on resume. This function actually returns
+	/*
+	 * TPM 1.2 requires self-test on resume. This function actually returns
 	 * an error code but for unknown reason it isn't handled.
 	 */
-	if (!(chip->flags & TPM_CHIP_FLAG_TPM2))
+	if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
+		ret = request_locality(chip, 0);
+		if (ret < 0)
+			return ret;
+
 		tpm1_do_selftest(chip);
 
+		release_locality(chip, 0);
+	}
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(tpm_tis_resume);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt()
  2021-05-10 12:28 [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Jarkko Sakkinen
  2021-05-10 12:28 ` [PATCH 2/2] tpm, tpm_tis: Reserve locality in tpm_tis_resume() Jarkko Sakkinen
@ 2021-05-10 23:09 ` Lino Sanfilippo
  2021-05-11 23:36   ` Jarkko Sakkinen
  1 sibling, 1 reply; 4+ messages in thread
From: Lino Sanfilippo @ 2021-05-10 23:09 UTC (permalink / raw)
  To: Jarkko Sakkinen, linux-integrity
  Cc: Hans de Goede, stable, Peter Huewe, Jason Gunthorpe,
	James Bottomley, Stefan Berger, Jerry Snitselaar

Hi,

On 10.05.21 at 14:28, Jarkko Sakkinen wrote:
> The earlier fix (linked) only partially fixed the locality handling bug
> in tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.
>
> Extend the locality handling to cover TPM2.
>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: stable@vger.kernel.org
> Link: https://lore.kernel.org/linux-integrity/20210220125534.20707-1-jarkko@kernel.org/
> Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
> Reported-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
> ---
>
> v1:
> * Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.
>
>  drivers/char/tpm/tpm_tis_core.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
> index a2e0395cbe61..6fa150a3b75e 100644
> --- a/drivers/char/tpm/tpm_tis_core.c
> +++ b/drivers/char/tpm/tpm_tis_core.c
> @@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)
>  	cap_t cap;
>  	int ret;
>
> -	/* TPM 2.0 */
> -	if (chip->flags & TPM_CHIP_FLAG_TPM2)
> -		return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
> -
> -	/* TPM 1.2 */
>  	ret = request_locality(chip, 0);
>  	if (ret < 0)
>  		return ret;
>
> -	ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
> +	if (chip->flags & TPM_CHIP_FLAG_TPM2)
> +		ret = tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
> +	else
> +		ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
>
>  	release_locality(chip, 0);
>
>

This fix works for me. Tested on a SLB9670vq2.0 and the warning message is gone.

Tested-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>

Regards,
Lino

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt()
  2021-05-10 23:09 ` [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Lino Sanfilippo
@ 2021-05-11 23:36   ` Jarkko Sakkinen
  0 siblings, 0 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2021-05-11 23:36 UTC (permalink / raw)
  To: Lino Sanfilippo
  Cc: linux-integrity, Hans de Goede, stable, Peter Huewe,
	Jason Gunthorpe, James Bottomley, Stefan Berger,
	Jerry Snitselaar

On Tue, May 11, 2021 at 01:09:35AM +0200, Lino Sanfilippo wrote:
> Hi,
> 
> On 10.05.21 at 14:28, Jarkko Sakkinen wrote:
> > The earlier fix (linked) only partially fixed the locality handling bug
> > in tpm_tis_gen_interrupt(), i.e. only for TPM 1.x.
> >
> > Extend the locality handling to cover TPM2.
> >
> > Cc: Hans de Goede <hdegoede@redhat.com>
> > Cc: stable@vger.kernel.org
> > Link: https://lore.kernel.org/linux-integrity/20210220125534.20707-1-jarkko@kernel.org/
> > Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
> > Reported-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
> > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
> > ---
> >
> > v1:
> > * Testing done with Intel NUC5i5MYHE with SLB9665 TPM2 chip.
> >
> >  drivers/char/tpm/tpm_tis_core.c | 10 ++++------
> >  1 file changed, 4 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
> > index a2e0395cbe61..6fa150a3b75e 100644
> > --- a/drivers/char/tpm/tpm_tis_core.c
> > +++ b/drivers/char/tpm/tpm_tis_core.c
> > @@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)
> >  	cap_t cap;
> >  	int ret;
> >
> > -	/* TPM 2.0 */
> > -	if (chip->flags & TPM_CHIP_FLAG_TPM2)
> > -		return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
> > -
> > -	/* TPM 1.2 */
> >  	ret = request_locality(chip, 0);
> >  	if (ret < 0)
> >  		return ret;
> >
> > -	ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
> > +	if (chip->flags & TPM_CHIP_FLAG_TPM2)
> > +		ret = tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
> > +	else
> > +		ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
> >
> >  	release_locality(chip, 0);
> >
> >
> 
> This fix works for me. Tested on a SLB9670vq2.0 and the warning message is gone.
> 
> Tested-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
> 
> Regards,
> Lino

Thanks a lot, I'll add your tag.

/Jarkko

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-05-11 23:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-10 12:28 [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Jarkko Sakkinen
2021-05-10 12:28 ` [PATCH 2/2] tpm, tpm_tis: Reserve locality in tpm_tis_resume() Jarkko Sakkinen
2021-05-10 23:09 ` [PATCH 1/2] tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() Lino Sanfilippo
2021-05-11 23:36   ` Jarkko Sakkinen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).