summaryrefslogtreecommitdiff
path: root/firmware/lib/vboot_firmware.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/vboot_firmware.c')
-rw-r--r--firmware/lib/vboot_firmware.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/firmware/lib/vboot_firmware.c b/firmware/lib/vboot_firmware.c
index 0d1a307a..a2936394 100644
--- a/firmware/lib/vboot_firmware.c
+++ b/firmware/lib/vboot_firmware.c
@@ -19,26 +19,26 @@
* good way to pass the params struct back to us. */
typedef struct VbLoadFirmwareInternal {
DigestContext body_digest_context;
- uint64_t body_size_accum;
+ uint32_t body_size_accum;
} VbLoadFirmwareInternal;
-void UpdateFirmwareBodyHash(LoadFirmwareParams* params,
- uint8_t* data, uint32_t size) {
+void VbUpdateFirmwareBodyHash(VbCommonParams* cparams,
+ uint8_t* data, uint32_t size) {
VbLoadFirmwareInternal* lfi =
- (VbLoadFirmwareInternal*)params->load_firmware_internal;
+ (VbLoadFirmwareInternal*)cparams->vboot_context;
DigestUpdate(&lfi->body_digest_context, data, size);
lfi->body_size_accum += size;
}
-int LoadFirmware(LoadFirmwareParams* params) {
- VbSharedDataHeader* shared = (VbSharedDataHeader*)params->shared_data_blob;
- GoogleBinaryBlockHeader* gbb = (GoogleBinaryBlockHeader*)params->gbb_data;
+int LoadFirmware(VbCommonParams* cparams, VbSelectFirmwareParams* fparams,
+ VbNvContext* vnc) {
+ VbSharedDataHeader* shared = (VbSharedDataHeader*)cparams->shared_data_blob;
+ GoogleBinaryBlockHeader* gbb = (GoogleBinaryBlockHeader*)cparams->gbb_data;
VbPublicKey* root_key;
VbLoadFirmwareInternal* lfi;
- VbNvContext* vnc = params->nv_context;
uint32_t try_b_count;
uint32_t lowest_version = 0xFFFFFFFF;
@@ -94,12 +94,12 @@ int LoadFirmware(LoadFirmwareParams* params) {
/* Allocate our internal data */
lfi = (VbLoadFirmwareInternal*)VbExMalloc(sizeof(VbLoadFirmwareInternal));
- params->load_firmware_internal = (uint8_t*)lfi;
+ cparams->vboot_context = (void*)lfi;
/* Loop over indices */
for (i = 0; i < 2; i++) {
VbKeyBlockHeader* key_block;
- uint64_t vblock_size;
+ uint32_t vblock_size;
VbFirmwarePreambleHeader* preamble;
RSAPublicKey* data_key;
uint64_t key_version;
@@ -110,12 +110,12 @@ int LoadFirmware(LoadFirmwareParams* params) {
/* If try B count is non-zero try firmware B first */
index = (try_b_count ? 1 - i : i);
if (0 == index) {
- key_block = (VbKeyBlockHeader*)params->verification_block_0;
- vblock_size = params->verification_size_0;
+ key_block = (VbKeyBlockHeader*)fparams->verification_block_A;
+ vblock_size = fparams->verification_size_A;
check_result = &shared->check_fw_a_result;
} else {
- key_block = (VbKeyBlockHeader*)params->verification_block_1;
- vblock_size = params->verification_size_1;
+ key_block = (VbKeyBlockHeader*)fparams->verification_block_B;
+ vblock_size = fparams->verification_size_B;
check_result = &shared->check_fw_b_result;
}
@@ -222,12 +222,16 @@ int LoadFirmware(LoadFirmwareParams* params) {
shared->flags |= VBSD_LF_USE_RO_NORMAL;
} else {
+ VbError_t rv;
+
/* Read the firmware data */
VBPERFSTART("VB_RFD");
DigestInit(&lfi->body_digest_context, data_key->algorithm);
lfi->body_size_accum = 0;
- if (0 != GetFirmwareBody(params, index)) {
- VBDEBUG(("GetFirmwareBody() failed for index %d\n", index));
+ rv = VbExHashFirmwareBody(cparams, (index ? VB_SELECT_FIRMWARE_B :
+ VB_SELECT_FIRMWARE_A));
+ if (VBERROR_SUCCESS != rv) {
+ VBDEBUG(("VbExHashFirmwareBody() failed for index %d\n", index));
*check_result = VBSD_LF_CHECK_GET_FW_BODY;
RSAPublicKeyFree(data_key);
VBPERFEND("VB_RFD");
@@ -290,7 +294,7 @@ int LoadFirmware(LoadFirmwareParams* params) {
/* Free internal data */
VbExFree(lfi);
- params->load_firmware_internal = NULL;
+ cparams->vboot_context = NULL;
/* Handle finding good firmware */
if (good_index >= 0) {
@@ -326,9 +330,5 @@ LoadFirmwareExit:
VbNvSet(vnc, VBNV_RECOVERY_REQUEST, VBERROR_SUCCESS != retval ?
recovery : VBNV_RECOVERY_NOT_REQUESTED);
- /* Note that we don't reduce params->shared_data_size to shared->data_used,
- * since we want to leave space for LoadKernel() to add to the shared data
- * buffer. */
-
return retval;
}