lkml.org 
[lkml]   [2019]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v11 08/16] tpm: clean up tpm_try_transmit() error handling flow
    From
    Date
    On 2/5/19 5:47 PM, Jarkko Sakkinen wrote:
    > Move locking, locality handling and power management to tpm_transmit()
    > in order to simplify the flow.
    >
    > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    > Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    > Tested-by: Stefan Berger <stefanb@linux.ibm.com>
    > Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
    > Reviewed-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    > ---
    > drivers/char/tpm/tpm-interface.c | 94 +++++++++++++++-----------------
    > drivers/char/tpm/tpm.h | 1 +
    > drivers/char/tpm/tpm2-space.c | 2 +-
    > 3 files changed, 45 insertions(+), 52 deletions(-)
    >
    > diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
    > index c28ffef92f1a..f5f5224f68b0 100644
    > --- a/drivers/char/tpm/tpm-interface.c
    > +++ b/drivers/char/tpm/tpm-interface.c
    > @@ -167,7 +167,6 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, struct tpm_space *space,
    > ssize_t len = 0;
    > u32 count, ordinal;
    > unsigned long stop;
    > - bool need_locality;
    >
    > rc = tpm_validate_command(chip, space, buf, bufsiz);
    > if (rc == -EINVAL)
    > @@ -197,37 +196,16 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, struct tpm_space *space,
    > return -E2BIG;
    > }
    >
    > - if (!(flags & TPM_TRANSMIT_UNLOCKED) && !(flags & TPM_TRANSMIT_NESTED))
    > - mutex_lock(&chip->tpm_mutex);
    > -
    > - if (chip->ops->clk_enable != NULL)
    > - chip->ops->clk_enable(chip, true);
    > -
    > - /* Store the decision as chip->locality will be changed. */
    > - need_locality = chip->locality == -1;
    > -
    > - if (need_locality) {
    > - rc = tpm_request_locality(chip, flags);
    > - if (rc < 0) {
    > - need_locality = false;
    > - goto out_locality;
    > - }
    > - }
    > -
    > - rc = tpm_cmd_ready(chip, flags);
    > - if (rc)
    > - goto out_locality;
    > -
    > rc = tpm2_prepare_space(chip, space, ordinal, buf);
    > if (rc)
    > - goto out;
    > + return rc;
    >
    > rc = chip->ops->send(chip, buf, count);
    > if (rc < 0) {
    > if (rc != -EPIPE)
    > dev_err(&chip->dev,
    > "%s: tpm_send: error %d\n", __func__, rc);
    > - goto out;
    > + goto out_rc;
    > }
    >
    > if (chip->flags & TPM_CHIP_FLAG_IRQ)
    > @@ -243,7 +221,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, struct tpm_space *space,
    > if (chip->ops->req_canceled(chip, status)) {
    > dev_err(&chip->dev, "Operation Canceled\n");
    > rc = -ECANCELED;
    > - goto out;
    > + goto out_rc;
    > }
    >
    > tpm_msleep(TPM_TIMEOUT_POLL);
    > @@ -253,40 +231,20 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, struct tpm_space *space,
    > chip->ops->cancel(chip);
    > dev_err(&chip->dev, "Operation Timed out\n");
    > rc = -ETIME;
    > - goto out;
    > + goto out_rc;
    >
    > out_recv:
    > len = chip->ops->recv(chip, buf, bufsiz);
    > if (len < 0) {
    > rc = len;
    > - dev_err(&chip->dev,
    > - "tpm_transmit: tpm_recv: error %d\n", rc);
    > - goto out;
    > - } else if (len < TPM_HEADER_SIZE) {
    > + dev_err(&chip->dev, "tpm_transmit: tpm_recv: error %d\n", rc);
    > + } else if (len < TPM_HEADER_SIZE || len != be32_to_cpu(header->length))
    > rc = -EFAULT;
    > - goto out;
    > - }


    Add an else branch here for 'rc = 0' because it is otherwise set from
    'rc = chip->ops->send(chip, buf, count);'. Or add it further above...


    \
     
     \ /
      Last update: 2019-02-08 00:38    [W:3.434 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site