Re: [PATCH v2 2/4] tpm_tis: Move CRC check to generic send routine

From: Jarkko Sakkinen
Date: Tue Jun 06 2023 - 17:10:36 EST


On Mon Jun 5, 2023 at 8:59 PM EEST, Alexander Steffen wrote:
> The CRC functionality is initialized before tpm_tis_core, so it can be used
> on all code paths within the module. Therefore, move the CRC check to the
> generic send routine, that also contains all other checks for successful
> command transmission, so that all those checks are in one place.
>
> Also, this ensures that tpm_tis_ready is called when a CRC failure is
> detected, to clear the invalid data from the TPM, which did not happen
> previously.
>
> Signed-off-by: Alexander Steffen <Alexander.Steffen@xxxxxxxxxxxx>
> ---
> drivers/char/tpm/tpm_tis_core.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
> index aaaa136044ae..5ddaf24518be 100644
> --- a/drivers/char/tpm/tpm_tis_core.c
> +++ b/drivers/char/tpm/tpm_tis_core.c
> @@ -466,6 +466,12 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len)
> goto out_err;
> }
>
> + rc = tpm_tis_verify_crc(priv, len, buf);
> + if (rc < 0) {
> + dev_err(&chip->dev, "CRC mismatch for command.\n");
> + goto out_err;
> + }
> +
> return 0;
>
> out_err:
> @@ -510,12 +516,6 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)
> if (rc < 0)
> return rc;
>
> - rc = tpm_tis_verify_crc(priv, len, buf);
> - if (rc < 0) {
> - dev_err(&chip->dev, "CRC mismatch for command.\n");
> - return rc;
> - }
> -
> /* go and do it */
> rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO);
> if (rc < 0)
> --
> 2.34.1

Reviewed-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx>

BR, Jarkko