diff options
author | Karthikeyan Ramasubramanian <kramasub@google.com> | 2021-11-10 17:43:45 -0700 |
---|---|---|
committer | Karthik Ramasubramanian <kramasub@google.com> | 2021-11-17 23:05:11 +0000 |
commit | 2e445ad1af7cfcbebffdec8863afac2faef748fa (patch) | |
tree | f939d3c2eaa774e1aaeb9a8e0d06e28ebf7f5e78 /src/security/tpm | |
parent | e1095496e1f2e2284f51a89a46083e932d6dc24f (diff) |
security/tpm/tcg-2.0: Handle TPM_RC_NV_RANGE return code
As per the TPM spec, if offset and the size field of data add to a value
that is greater than the dataSize field of the NV Index referenced by
nvIndex, the TPM shall return an error (TPM_RC_NV_RANGE). Handle the TPM
error and map it to an appropriate vboot error.
BUG=None
TEST=Build and boot to OS in Guybrush.
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Change-Id: I8b403e2f33cc1368065cc21f73df1102695f73eb
Reviewed-on: https://review.coreboot.org/c/coreboot/+/59134
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Diffstat (limited to 'src/security/tpm')
-rw-r--r-- | src/security/tpm/tss/tcg-2.0/tss.c | 3 | ||||
-rw-r--r-- | src/security/tpm/tss/tcg-2.0/tss_structures.h | 1 | ||||
-rw-r--r-- | src/security/tpm/tss_errors.h | 1 |
3 files changed, 5 insertions, 0 deletions
diff --git a/src/security/tpm/tss/tcg-2.0/tss.c b/src/security/tpm/tss/tcg-2.0/tss.c index cfa533b880..8c9d12f7b0 100644 --- a/src/security/tpm/tss/tcg-2.0/tss.c +++ b/src/security/tpm/tss/tcg-2.0/tss.c @@ -242,6 +242,9 @@ uint32_t tlcl_read(uint32_t index, void *data, uint32_t length) case TPM_RC_CR50_NV_UNDEFINED: return TPM_E_BADINDEX; + case TPM_RC_NV_RANGE: + return TPM_E_RANGE; + default: return TPM_E_READ_FAILURE; } diff --git a/src/security/tpm/tss/tcg-2.0/tss_structures.h b/src/security/tpm/tss/tcg-2.0/tss_structures.h index cb8b4f9f9e..c0e354d8f5 100644 --- a/src/security/tpm/tss/tcg-2.0/tss_structures.h +++ b/src/security/tpm/tss/tcg-2.0/tss_structures.h @@ -144,6 +144,7 @@ struct tpm_header { /* Values copied from tpm2/tpm_types.h */ #define RC_VER1 0x100 #define TPM_RC_INITIALIZE ((TPM_RC)(RC_VER1 + 0x000)) +#define TPM_RC_NV_RANGE ((TPM_RC)(RC_VER1 + 0x046)) #define TPM_RC_NV_UNINITIALIZED ((TPM_RC)(RC_VER1 + 0x04A)) /* diff --git a/src/security/tpm/tss_errors.h b/src/security/tpm/tss_errors.h index 7c4e569397..49a7405a7b 100644 --- a/src/security/tpm/tss_errors.h +++ b/src/security/tpm/tss_errors.h @@ -41,5 +41,6 @@ #define TPM_E_INVALID_ARG ((uint32_t)0x0000500c) #define TPM_E_HASH_ERROR ((uint32_t)0x0000500d) #define TPM_E_NO_SUCH_COMMAND ((uint32_t)0x0000500e) +#define TPM_E_RANGE ((uint32_t)0x0000500f) #endif /* TSS_ERRORS_H_ */ |