summaryrefslogtreecommitdiff
path: root/firmware/lib/vboot_api_firmware.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/vboot_api_firmware.c')
-rw-r--r--firmware/lib/vboot_api_firmware.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/firmware/lib/vboot_api_firmware.c b/firmware/lib/vboot_api_firmware.c
index e0c93a37..cfe4251c 100644
--- a/firmware/lib/vboot_api_firmware.c
+++ b/firmware/lib/vboot_api_firmware.c
@@ -7,6 +7,7 @@
#include "sysincludes.h"
+#include "gbb_access.h"
#include "gbb_header.h"
#include "load_firmware_fw.h"
#include "rollback_index.h"
@@ -27,6 +28,9 @@ VbError_t VbSelectFirmware(VbCommonParams *cparams,
int is_dev = (shared->flags & VBSD_BOOT_DEV_SWITCH_ON ? 1 : 0);
uint32_t tpm_status = 0;
+ cparams->gbb = NULL;
+ cparams->bmp = NULL;
+
/* Start timer */
shared->timer_vb_select_firmware_enter = VbExGetTimer();
@@ -44,6 +48,11 @@ VbError_t VbSelectFirmware(VbCommonParams *cparams,
/* Go directly to recovery mode */
fparams->selected_firmware = VB_SELECT_FIRMWARE_RECOVERY;
} else {
+ cparams->gbb = VbExMalloc(sizeof(*cparams->gbb));
+ retval = VbGbbReadHeader_static(cparams, cparams->gbb);
+ if (VBERROR_SUCCESS != retval)
+ goto VbSelectFirmware_exit;
+
/* Chain to LoadFirmware() */
retval = LoadFirmware(cparams, fparams, &vnc);
@@ -107,6 +116,11 @@ VbError_t VbSelectFirmware(VbCommonParams *cparams,
VbSelectFirmware_exit:
+ if (cparams->gbb) {
+ VbExFree(cparams->gbb);
+ cparams->gbb = NULL;
+ }
+
/* Save NV storage */
VbNvTeardown(&vnc);
if (vnc.raw_changed)