mirror of
https://github.com/systemd/systemd.git
synced 2025-01-03 05:18:09 +03:00
tpm2-util: Also retry unsealing after policy_pcr returns PCR_CHANGED
It's not just Esys_Unseal that may fail due to PCR changes during the session, but also Esys_PolicyPCR. Perform a retry in that case as well. Fixes #35490
This commit is contained in:
parent
9aee971185
commit
e61032bf47
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user