Skip to content

Commit 2f661f7

Browse files
hramrachjarkkojs
authored andcommitted
tpm: tis: Double the timeout B to 4s
With some Infineon chips the timeouts in tpm_tis_send_data (both B and C) can reach up to about 2250 ms. Timeout C is retried since commit de9e33d ("tpm, tpm_tis: Workaround failed command reception on Infineon devices") Timeout B still needs to be extended. The problem is most commonly encountered with context related operation such as load context/save context. These are issued directly by the kernel, and there is no retry logic for them. When a filesystem is set up to use the TPM for unlocking the boot fails, and restarting the userspace service is ineffective. This is likely because ignoring a load context/save context result puts the real TPM state and the TPM state expected by the kernel out of sync. Chips known to be affected: tpm_tis IFX1522:00: 2.0 TPM (device-id 0x1D, rev-id 54) Description: SLB9672 Firmware Revision: 15.22 tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1B, rev-id 22) Firmware Revision: 7.83 tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1A, rev-id 16) Firmware Revision: 5.63 Link: https://lore.kernel.org/linux-integrity/[email protected]/ Signed-off-by: Michal Suchanek <[email protected]> Reviewed-by: Jarkko Sakkinen <[email protected]> Signed-off-by: Jarkko Sakkinen <[email protected]>
1 parent 32d495b commit 2f661f7

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

drivers/char/tpm/tpm_tis_core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ enum tis_int_flags {
5454
enum tis_defaults {
5555
TIS_MEM_LEN = 0x5000,
5656
TIS_SHORT_TIMEOUT = 750, /* ms */
57-
TIS_LONG_TIMEOUT = 2000, /* 2 sec */
57+
TIS_LONG_TIMEOUT = 4000, /* 4 secs */
5858
TIS_TIMEOUT_MIN_ATML = 14700, /* usecs */
5959
TIS_TIMEOUT_MAX_ATML = 15000, /* usecs */
6060
};

include/linux/tpm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ enum tpm2_const {
224224

225225
enum tpm2_timeouts {
226226
TPM2_TIMEOUT_A = 750,
227-
TPM2_TIMEOUT_B = 2000,
227+
TPM2_TIMEOUT_B = 4000,
228228
TPM2_TIMEOUT_C = 200,
229229
TPM2_TIMEOUT_D = 30,
230230
TPM2_DURATION_SHORT = 20,

0 commit comments

Comments
 (0)