2018-10-15 11:19:23

by Tomas Winkler

[permalink] [raw]
Subject: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()

Ignore the return value of go_to_idle() in tpm_try_transmit().
Once it may shadow the return value of actual tpm operation,
second the consequent command will fail as well and the error
will be caought anyway.
Last fix wrong goto, that jumped back instead of forward.

Fixes: 627448e85c76 ("tpm: separate cmd_ready/go_idle from runtime_pm")
Signed-off-by: Tomas Winkler <[email protected]>
---
drivers/char/tpm/tpm-interface.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 129f640424b7..f69c711bf74a 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -547,9 +547,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
dev_err(&chip->dev, "tpm2_commit_space: error %d\n", rc);

out:
- rc = tpm_go_idle(chip, flags);
- if (rc)
- goto out;
+ (void)tpm_go_idle(chip, flags);

if (need_locality)
tpm_relinquish_locality(chip, flags);
--
2.14.4



2018-10-16 05:42:37

by Jason Gunthorpe

[permalink] [raw]
Subject: Re: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()

On Mon, Oct 15, 2018 at 02:14:34PM +0300, Tomas Winkler wrote:
> Ignore the return value of go_to_idle() in tpm_try_transmit().
> Once it may shadow the return value of actual tpm operation,
> second the consequent command will fail as well and the error
> will be caought anyway.
> Last fix wrong goto, that jumped back instead of forward.
>
> Fixes: 627448e85c76 ("tpm: separate cmd_ready/go_idle from runtime_pm")
> Signed-off-by: Tomas Winkler <[email protected]>
> drivers/char/tpm/tpm-interface.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 129f640424b7..f69c711bf74a 100644
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -547,9 +547,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> dev_err(&chip->dev, "tpm2_commit_space: error %d\n", rc);
>
> out:
> - rc = tpm_go_idle(chip, flags);
> - if (rc)
> - goto out;
> + (void)tpm_go_idle(chip, flags);

We don't really use this style in the kernel, AFAIK.

Jason

2018-10-16 06:22:40

by Tomas Winkler

[permalink] [raw]
Subject: RE: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()



>
> On Mon, Oct 15, 2018 at 02:14:34PM +0300, Tomas Winkler wrote:
> > Ignore the return value of go_to_idle() in tpm_try_transmit().
> > Once it may shadow the return value of actual tpm operation, second
> > the consequent command will fail as well and the error will be caought
> > anyway.
> > Last fix wrong goto, that jumped back instead of forward.
> >
> > Fixes: 627448e85c76 ("tpm: separate cmd_ready/go_idle from
> > runtime_pm")
> > Signed-off-by: Tomas Winkler <[email protected]>
> > drivers/char/tpm/tpm-interface.c | 4 +---
> > 1 file changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/drivers/char/tpm/tpm-interface.c
> > b/drivers/char/tpm/tpm-interface.c
> > index 129f640424b7..f69c711bf74a 100644
> > +++ b/drivers/char/tpm/tpm-interface.c
> > @@ -547,9 +547,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip
> *chip,
> > dev_err(&chip->dev, "tpm2_commit_space: error %d\n", rc);
> >
> > out:
> > - rc = tpm_go_idle(chip, flags);
> > - if (rc)
> > - goto out;
> > + (void)tpm_go_idle(chip, flags);
>
> We don't really use this style in the kernel, AFAIK.


Right, there are no many of those; just wanted to emphasize that return value is ignored. I can drop (void).

Thanks
Tomas


2018-10-17 23:02:20

by Jarkko Sakkinen

[permalink] [raw]
Subject: Re: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()

On Mon, 15 Oct 2018, Tomas Winkler wrote:
> Ignore the return value of go_to_idle() in tpm_try_transmit().
> Once it may shadow the return value of actual tpm operation,
> second the consequent command will fail as well and the error
> will be caought anyway.
> Last fix wrong goto, that jumped back instead of forward.
>
> Fixes: 627448e85c76 ("tpm: separate cmd_ready/go_idle from runtime_pm")
> Signed-off-by: Tomas Winkler <[email protected]>
> ---
> drivers/char/tpm/tpm-interface.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 129f640424b7..f69c711bf74a 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -547,9 +547,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> dev_err(&chip->dev, "tpm2_commit_space: error %d\n", rc);
>
> out:
> - rc = tpm_go_idle(chip, flags);
> - if (rc)
> - goto out;
> + (void)tpm_go_idle(chip, flags);
>
> if (need_locality)
> tpm_relinquish_locality(chip, flags);
> --
> 2.14.4
>
>

LGTM. Should be probably Cc'd to stable (can add).

Reviewed-by: Jarkko Sakkinen <[email protected]>

/Jarkko

2018-10-17 23:24:09

by Tomas Winkler

[permalink] [raw]
Subject: RE: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()



> -----Original Message-----
> From: Jarkko Sakkinen [mailto:[email protected]]
> Sent: Thursday, October 18, 2018 02:01
> To: Winkler, Tomas <[email protected]>
> Cc: Jarkko Sakkinen <[email protected]>; Jason Gunthorpe
> <[email protected]>; Nayna Jain <[email protected]>; Usyskin,
> Alexander <[email protected]>; Struk, Tadeusz
> <[email protected]>; [email protected]; linux-security-
> [email protected]; [email protected]
> Subject: Re: [PATCH] tpm: tpm_try_transmit() ignore value of go_to_idle()
>
> On Mon, 15 Oct 2018, Tomas Winkler wrote:
> > Ignore the return value of go_to_idle() in tpm_try_transmit().
> > Once it may shadow the return value of actual tpm operation, second
> > the consequent command will fail as well and the error will be caought
> > anyway.
> > Last fix wrong goto, that jumped back instead of forward.
> >
> > Fixes: 627448e85c76 ("tpm: separate cmd_ready/go_idle from
> > runtime_pm")
> > Signed-off-by: Tomas Winkler <[email protected]>
> > ---
> > drivers/char/tpm/tpm-interface.c | 4 +---
> > 1 file changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/drivers/char/tpm/tpm-interface.c
> > b/drivers/char/tpm/tpm-interface.c
> > index 129f640424b7..f69c711bf74a 100644
> > --- a/drivers/char/tpm/tpm-interface.c
> > +++ b/drivers/char/tpm/tpm-interface.c
> > @@ -547,9 +547,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip
> *chip,
> > dev_err(&chip->dev, "tpm2_commit_space: error %d\n", rc);
> >
> > out:
> > - rc = tpm_go_idle(chip, flags);
> > - if (rc)
> > - goto out;
> > + (void)tpm_go_idle(chip, flags);
> >
> > if (need_locality)
> > tpm_relinquish_locality(chip, flags);
> > --
> > 2.14.4
> >
> >
>
> LGTM. Should be probably Cc'd to stable (can add).
>
> Reviewed-by: Jarkko Sakkinen <[email protected]>
I've posted another one, there are more issues in the flow.