summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/mrc_cache/mrc_cache.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/drivers/mrc_cache/mrc_cache.c b/src/drivers/mrc_cache/mrc_cache.c
index 1bbb426b5d..3b98dbaa63 100644
--- a/src/drivers/mrc_cache/mrc_cache.c
+++ b/src/drivers/mrc_cache/mrc_cache.c
@@ -193,19 +193,20 @@ static int mrc_data_valid(int type, const struct mrc_metadata *md,
if (md->data_size != data_size)
return -1;
- checksum = compute_ip_checksum(data, data_size);
+ hash_idx = cr->tpm_hash_index;
+ if (hash_idx && CONFIG(MRC_SAVE_HASH_IN_TPM)) {
+ if (!mrc_cache_verify_hash(hash_idx, data, data_size))
+ return -1;
+ } else {
+ checksum = compute_ip_checksum(data, data_size);
- if (md->data_checksum != checksum) {
- printk(BIOS_ERR, "MRC: data checksum mismatch: %x vs %x\n",
- md->data_checksum, checksum);
- return -1;
+ if (md->data_checksum != checksum) {
+ printk(BIOS_ERR, "MRC: data checksum mismatch: %x vs %x\n",
+ md->data_checksum, checksum);
+ return -1;
+ }
}
- hash_idx = cr->tpm_hash_index;
- if (hash_idx && CONFIG(MRC_SAVE_HASH_IN_TPM) &&
- !mrc_cache_verify_hash(hash_idx, data, data_size))
- return -1;
-
return 0;
}