Skip to content

Commit

Permalink
tpm_tis: Resend command to recover from data transfer errors
Browse files Browse the repository at this point in the history
[ Upstream commit 280db21 ]

Similar to the transmission of TPM responses, also the transmission of TPM
commands may become corrupted. Instead of aborting when detecting such
issues, try resending the command again.

Signed-off-by: Alexander Steffen <Alexander.Steffen@infineon.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
webmeister authored and gregkh committed Sep 23, 2023
1 parent 59285cb commit 268f493
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions drivers/char/tpm/tpm_tis_core.c
Expand Up @@ -512,10 +512,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)
int rc;
u32 ordinal;
unsigned long dur;
unsigned int try;

rc = tpm_tis_send_data(chip, buf, len);
if (rc < 0)
return rc;
for (try = 0; try < TPM_RETRY; try++) {
rc = tpm_tis_send_data(chip, buf, len);
if (rc >= 0)
/* Data transfer done successfully */
break;
else if (rc != -EIO)
/* Data transfer failed, not recoverable */
return rc;
}

rc = tpm_tis_verify_crc(priv, len, buf);
if (rc < 0) {
Expand Down

0 comments on commit 268f493

Please sign in to comment.