tpm2-util: return better errors if we try to unlock a tpm key on the wrong tpm

Let's improve error handling in case one tries to unlock a TPM2 locked
volume on a different machine via TPM than it was originally enrolled
on. Let's recognize this case and print a clearer error message.
This commit is contained in:
Lennart Poettering
2025-03-19 21:27:54 +01:00
parent 0e0f4cc60c
commit 0015502168
4 changed files with 11 additions and 0 deletions
@@ -109,6 +109,8 @@ int acquire_luks2_key(
n_policy_hash,
srk,
ret_decrypted_key);
if (r == -EREMOTE)
return log_error_errno(r, "TPM key integrity check failed. Key enrolled in superblock most likely does not belong to this TPM.");
if (r < 0)
return log_error_errno(r, "Failed to unseal secret using TPM2: %m");
+2
View File
@@ -1355,6 +1355,8 @@ int decrypt_credential_and_warn(
/* n_policy_hash= */ 1,
/* srk= */ NULL,
&tpm2_key);
if (r == -EREMOTE)
return log_error_errno(r, "TPM key integrity check failed. Key enrolled in superblock most likely does not belong to this TPM.");
if (r < 0)
return log_error_errno(r, "Failed to unseal secret using TPM2: %m");
#else
+4
View File
@@ -167,6 +167,8 @@ int acquire_tpm2_key(
n_policy_hash,
srk,
ret_decrypted_key);
if (r == -EREMOTE)
return log_error_errno(r, "TPM key integrity check failed. Key enrolled in superblock most likely does not belong to this TPM.");
if (r < 0)
return log_error_errno(r, "Failed to unseal secret using TPM2: %m");
@@ -215,6 +217,8 @@ int acquire_tpm2_key(
n_policy_hash,
srk,
ret_decrypted_key);
if (r == -EREMOTE)
return log_error_errno(r, "TPM key integrity check failed. Key enrolled in superblock most likely does not belong to this TPM.");
if (r < 0) {
log_error_errno(r, "Failed to unseal secret using TPM2: %m");
+3
View File
@@ -2283,6 +2283,9 @@ int tpm2_load(
if (rc == TPM2_RC_LOCKOUT)
return log_debug_errno(SYNTHETIC_ERRNO(ENOLCK),
"TPM2 device is in dictionary attack lockout mode.");
if ((rc & ~(TPM2_RC_N_MASK|TPM2_RC_P)) == TPM2_RC_INTEGRITY) /* Return a recognizable error if this key does not belong to the local TPM */
return log_debug_errno(SYNTHETIC_ERRNO(EREMOTE),
"Key invalid or does not belong to current TPM.");
if (rc != TSS2_RC_SUCCESS)
return log_debug_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
"Failed to load key into TPM: %s", sym_Tss2_RC_Decode(rc));