diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c index 252136af3e1..4bd9fc65dd2 100644 --- a/src/shared/tpm2-util.c +++ b/src/shared/tpm2-util.c @@ -4015,6 +4015,9 @@ int tpm2_policy_pcr( ESYS_TR_NONE, NULL, pcr_selection); + if (rc == TPM2_RC_PCR_CHANGED) + return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN), + "Failed to add PCR policy to TPM: %s", sym_Tss2_RC_Decode(rc)); if (rc != TSS2_RC_SUCCESS) return log_debug_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Failed to add PCR policy to TPM: %s", sym_Tss2_RC_Decode(rc)); @@ -5810,6 +5813,11 @@ int tpm2_unseal(Tpm2Context *c, !!pin, (shard == 1 || !iovec_is_set(pubkey)) ? pcrlock_policy : NULL, &policy_digest); + if (r == -EUCLEAN && i > 0) { + log_debug("A PCR value changed during the TPM2 policy session, restarting HMAC key unsealing (%u tries left).", i); + retry = true; + break; + } if (r < 0) return r;