summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile19
-rw-r--r--firmware/2lib/include/2struct.h5
-rw-r--r--firmware/include/gbb_access.h36
-rw-r--r--firmware/include/region.h55
-rw-r--r--firmware/include/vboot_api.h3
-rw-r--r--firmware/lib/include/vboot_display.h5
-rw-r--r--firmware/lib/include/vboot_kernel.h8
-rw-r--r--firmware/lib/region-fw.c55
-rw-r--r--firmware/lib/region-init.c100
-rw-r--r--firmware/lib/region-kernel.c89
-rw-r--r--firmware/lib/vboot_api_kernel.c24
-rw-r--r--firmware/lib/vboot_display.c14
-rw-r--r--firmware/lib/vboot_kernel.c3
-rw-r--r--firmware/lib/vboot_ui.c19
-rw-r--r--firmware/lib/vboot_ui_menu.c32
-rw-r--r--firmware/stub/vboot_api_stub_region.c18
-rw-r--r--tests/ec_sync_tests.c8
-rw-r--r--tests/vboot_api_devmode_tests.c8
-rw-r--r--tests/vboot_api_kernel2_tests.c28
-rw-r--r--tests/vboot_api_kernel5_tests.c23
-rw-r--r--tests/vboot_detach_menu_tests.c8
-rw-r--r--tests/vboot_display_tests.c60
-rw-r--r--tests/vboot_kernel_tests.c5
-rw-r--r--tests/vboot_region_tests.c196
-rw-r--r--utility/load_kernel_test.c2
25 files changed, 188 insertions, 635 deletions
diff --git a/Makefile b/Makefile
index 3c12e79b..ed73e260 100644
--- a/Makefile
+++ b/Makefile
@@ -318,12 +318,11 @@ BDBLIB = ${BUILD}/bdb.a
# Firmware library sources needed by VbInit() call
VBINIT_SRCS = \
firmware/lib/vboot_common_init.c \
- firmware/lib/region-init.c \
+ firmware/lib/region-init.c
# Additional firmware library sources needed by VbSelectFirmware() call
VBSF_SRCS = \
- firmware/lib/vboot_common.c \
- firmware/lib/region-fw.c \
+ firmware/lib/vboot_common.c
# Additional firmware library sources needed by VbSelectAndLoadKernel() call
VBSLK_SRCS = \
@@ -339,8 +338,7 @@ VBSLK_SRCS = \
firmware/lib/vboot_display.c \
firmware/lib/vboot_kernel.c \
firmware/lib/vboot_ui.c \
- firmware/lib/vboot_ui_menu.c \
- firmware/lib/region-kernel.c \
+ firmware/lib/vboot_ui_menu.c
# Code common to both vboot 2.0 (old structs) and 2.1 (new structs)
FWLIB2X_SRCS = \
@@ -410,8 +408,7 @@ ifeq (${FIRMWARE_ARCH},)
# TODO: split out other stub funcs too
VBINIT_SRCS += \
firmware/stub/tpm_lite_stub.c \
- firmware/stub/vboot_api_stub_init.c \
- firmware/stub/vboot_api_stub_region.c
+ firmware/stub/vboot_api_stub_init.c
VBSLK_SRCS += \
firmware/stub/vboot_api_stub.c \
@@ -747,10 +744,6 @@ TEST_NAMES += \
tests/rollback_index2_tests
endif
-ifdef REGION_READ
-TEST_NAMES += tests/vboot_region_tests
-endif
-
TEST_FUTIL_NAMES = \
tests/futility/binary_editor \
tests/futility/test_file_types \
@@ -910,10 +903,6 @@ ${FWLIB_OBJS}: CFLAGS += -DSAVE_LOCALE_IMMEDIATELY
${FWLIB_OBJS}: CFLAGS += -DCOPY_BMP_DATA
endif
-ifdef REGION_READ
-${FWLIB_OBJS}: CFLAGS += -DREGION_READ
-endif
-
ifeq (${FIRMWARE_ARCH},)
# Disable rollback TPM when compiling locally, since otherwise
# load_kernel_test attempts to talk to the TPM.
diff --git a/firmware/2lib/include/2struct.h b/firmware/2lib/include/2struct.h
index 589e7c9b..3411de77 100644
--- a/firmware/2lib/include/2struct.h
+++ b/firmware/2lib/include/2struct.h
@@ -208,6 +208,11 @@ struct vb2_shared_data {
uint32_t workbuf_kernel_key_offset;
uint32_t workbuf_kernel_key_size;
+ /* GBB data and size */
+ struct vb2_gbb_header *gbb;
+ uint32_t gbb_size;
+
+
} __attribute__((packed));
/****************************************************************************/
diff --git a/firmware/include/gbb_access.h b/firmware/include/gbb_access.h
index 7b11dc85..9b4e0dde 100644
--- a/firmware/include/gbb_access.h
+++ b/firmware/include/gbb_access.h
@@ -10,43 +10,43 @@
#include "vboot_api.h"
-struct BmpBlockHeader;
-struct ImageInfo;
-struct GoogleBinaryBlockHeader;
-struct ScreenLayout;
+struct vb2_context;
struct VbPublicKey;
/**
- * Read the GBB header
- *
- * This accesses the GBB and reads its header.
- *
- * @param cparams Vboot common parameters
- * @param gbb Place to put GBB header
- */
-VbError_t VbGbbReadHeader_static(VbCommonParams *cparams,
- struct GoogleBinaryBlockHeader *gbb);
-
-/**
* Read the root key from the GBB
*
- * @param cparams Vboot common parameters
+ * @param ctx Vboot context
* @param keyp Returns a pointer to the key. The caller must call
* free() on the key when finished with it.
* @return VBERROR_... error, VBERROR_SUCCESS on success,
*/
-VbError_t VbGbbReadRootKey(VbCommonParams *cparams,
+VbError_t VbGbbReadRootKey(struct vb2_context *ctx,
struct VbPublicKey **keyp);
/**
* Read the recovery key from the GBB
*
+ * @param ctx Vboot context
* @param cparams Vboot common parameters
* @param keyp Returns a pointer to the key. The caller must call
* free() on the key when finished with it.
* @return VBERROR_... error, VBERROR_SUCCESS on success,
*/
-VbError_t VbGbbReadRecoveryKey(VbCommonParams *cparams,
+VbError_t VbGbbReadRecoveryKey(struct vb2_context *ctx,
struct VbPublicKey **keyp);
+/**
+ * Read the hardware ID from the GBB
+ *
+ * @param ctx Vboot context
+ * @param hwid Place to put HWID, which will be null-terminated
+ * @param max_size Maximum size of HWID including terminated null
+ * character (suggest 256). If this size is too small
+ * then VBERROR_INVALID_PARAMETER is returned.
+ * @return VBERROR_... error, VBERROR_SUCCESS on success,
+ */
+VbError_t VbGbbReadHWID(struct vb2_context *ctx, char *hwid,
+ uint32_t max_size);
+
#endif
diff --git a/firmware/include/region.h b/firmware/include/region.h
deleted file mode 100644
index 78e1dba0..00000000
--- a/firmware/include/region.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Access to portions of the firmware image, perhaps later to be expanded
- * to other devices.
- */
-
-#ifndef VBOOT_REFERENCE_REGION_H_
-#define VBOOT_REFERENCE_REGION_H_
-
-#include "bmpblk_header.h"
-#include "gbb_header.h"
-#include "vboot_api.h"
-#include "vboot_struct.h"
-
-/* The maximum length of a hardware ID */
-#define VB_REGION_HWID_LEN 256
-
-/**
- * Read data from a region
- *
- * @param cparams Vboot common parameters
- * @param region Region number to read
- * @param offset Offset within region to start reading
- * @param size Size of data to read
- * @param buf Buffer to put the data into
- * @return VBERROR_... error, VBERROR_SUCCESS on success,
- */
-VbError_t VbRegionReadData(VbCommonParams *cparams,
- enum vb_firmware_region region, uint32_t offset,
- uint32_t size, void *buf);
-
-/**
- * Check the version of the GBB and print debug information if valid
- *
- * @param cparams Vboot common parameters
- */
-void VbRegionCheckVersion(VbCommonParams *cparams);
-
-/**
- * Read the hardware ID from the GBB
- *
- * @param cparams Vboot common parameters
- * @param hwid Place to put HWID, which will be null-terminated
- * @param max_size Maximum size of HWID including terminated null
- * character (suggest VB_REGION_HWID_LEN). If this size
- * it too small then VBERROR_INVALID_PARAMETER is
- * returned.
- * @return VBERROR_... error, VBERROR_SUCCESS on success,
- */
-VbError_t VbRegionReadHWID(VbCommonParams *cparams, char *hwid,
- uint32_t max_size);
-
-#endif /* VBOOT_REFERENCE_REGION_H_ */
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index aa3ba2c9..5edf0a6b 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -193,9 +193,6 @@ typedef struct VbCommonParams {
* the stack.
*/
void *caller_context;
-
- /* For internal use of Vboot - do not examine or modify! */
- struct GoogleBinaryBlockHeader *gbb;
} VbCommonParams;
/* Flags for VbInitParams.flags */
diff --git a/firmware/lib/include/vboot_display.h b/firmware/lib/include/vboot_display.h
index 8e6a4546..20066dfa 100644
--- a/firmware/lib/include/vboot_display.h
+++ b/firmware/lib/include/vboot_display.h
@@ -14,9 +14,8 @@ VbError_t VbDisplayScreen(struct vb2_context *ctx, uint32_t screen, int force);
VbError_t VbDisplayMenu(struct vb2_context *ctx,
uint32_t screen, int force, uint32_t selected_index,
uint32_t disabled_idx_mask);
-VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams);
-VbError_t VbCheckDisplayKey(struct vb2_context *ctx, VbCommonParams *cparams,
- uint32_t key);
+VbError_t VbDisplayDebugInfo(struct vb2_context *ctx);
+VbError_t VbCheckDisplayKey(struct vb2_context *ctx, uint32_t key);
/**
* Return a description of the recovery reason code.
diff --git a/firmware/lib/include/vboot_kernel.h b/firmware/lib/include/vboot_kernel.h
index 2195e0cf..33981690 100644
--- a/firmware/lib/include/vboot_kernel.h
+++ b/firmware/lib/include/vboot_kernel.h
@@ -17,11 +17,6 @@
struct vb2_context;
/**
- * Exported for unit tests only - frees memory used by VbSelectAndLoadKernel()
- */
-void VbApiKernelFree(VbCommonParams *cparams);
-
-/**
* Attempt loading a kernel from the specified type(s) of disks.
*
* If successful, sets p->disk_handle to the disk for the kernel and returns
@@ -54,8 +49,7 @@ uint32_t VbTryLoadKernel(struct vb2_context *ctx, VbCommonParams *cparams,
*
* Returns: 1=yes, 0=no, -1 = shutdown.
*/
-int VbUserConfirms(struct vb2_context *ctx, VbCommonParams *cparams,
- uint32_t confirm_flags);
+int VbUserConfirms(struct vb2_context *ctx, uint32_t confirm_flags);
/**
* Handle a normal boot.
diff --git a/firmware/lib/region-fw.c b/firmware/lib/region-fw.c
deleted file mode 100644
index 2bc1a690..00000000
--- a/firmware/lib/region-fw.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * High-level firmware API for loading and verifying rewritable firmware.
- * (Firmware portion)
- */
-
-#include "sysincludes.h"
-
-#include "bmpblk_header.h"
-#include "region.h"
-#include "gbb_access.h"
-#include "gbb_header.h"
-#include "load_kernel_fw.h"
-#include "utility.h"
-#include "vboot_api.h"
-#include "vboot_struct.h"
-
-static VbError_t VbGbbReadKey(VbCommonParams *cparams, uint32_t offset,
- VbPublicKey **keyp)
-{
- VbPublicKey hdr, *key;
- VbError_t ret;
- uint32_t size;
-
- ret = VbRegionReadData(cparams, VB_REGION_GBB, offset,
- sizeof(VbPublicKey), &hdr);
- if (ret)
- return ret;
-
- /* Deal with a zero-size key (used in testing) */
- size = hdr.key_offset + hdr.key_size;
- if (size < sizeof(hdr))
- size = sizeof(hdr);
- key = malloc(size);
- ret = VbRegionReadData(cparams, VB_REGION_GBB, offset, size, key);
- if (ret) {
- free(key);
- return ret;
- }
-
- *keyp = key;
- return VBERROR_SUCCESS;
-}
-
-VbError_t VbGbbReadRootKey(VbCommonParams *cparams, VbPublicKey **keyp)
-{
- return VbGbbReadKey(cparams, cparams->gbb->rootkey_offset, keyp);
-}
-
-VbError_t VbGbbReadRecoveryKey(VbCommonParams *cparams, VbPublicKey **keyp)
-{
- return VbGbbReadKey(cparams, cparams->gbb->recovery_key_offset, keyp);
-}
diff --git a/firmware/lib/region-init.c b/firmware/lib/region-init.c
index 26602b54..5cfd4eda 100644
--- a/firmware/lib/region-init.c
+++ b/firmware/lib/region-init.c
@@ -6,10 +6,11 @@
* (Firmware portion)
*/
-#include "sysincludes.h"
+#include "2sysincludes.h"
+#include "2common.h"
+#include "2misc.h"
-#include "bmpblk_header.h"
-#include "region.h"
+#include "sysincludes.h"
#include "gbb_access.h"
#include "gbb_header.h"
#include "load_kernel_fw.h"
@@ -17,34 +18,83 @@
#include "vboot_api.h"
#include "vboot_struct.h"
-VbError_t VbRegionReadData(VbCommonParams *cparams,
- enum vb_firmware_region region, uint32_t offset,
- uint32_t size, void *buf)
+VbError_t VbGbbReadData(struct vb2_context *ctx,
+ uint32_t offset, uint32_t size, void *buf)
{
+ struct vb2_shared_data *sd = vb2_get_sd(ctx);
+
/* This is the old API, for backwards compatibility */
- if (region == VB_REGION_GBB && cparams->gbb_data) {
- if (offset + size > cparams->gbb_size)
- return VBERROR_INVALID_GBB;
- memcpy(buf, cparams->gbb_data + offset, size);
- } else
-#ifdef REGION_READ
- {
- VbError_t ret;
-
- ret = VbExRegionRead(cparams, region, offset, size, buf);
- if (ret)
- return ret;
+ if (!sd->gbb)
+ return VBERROR_INVALID_GBB;
+
+ if (offset + size > sd->gbb_size)
+ return VBERROR_INVALID_GBB;
+
+ memcpy(buf, ((uint8_t *)sd->gbb) + offset, size);
+ return VBERROR_SUCCESS;
+}
+
+VbError_t VbGbbReadHWID(struct vb2_context *ctx, char *hwid, uint32_t max_size)
+{
+ struct vb2_shared_data *sd = vb2_get_sd(ctx);
+
+ if (!max_size)
+ return VBERROR_INVALID_PARAMETER;
+ *hwid = '\0';
+ StrnAppend(hwid, "{INVALID}", max_size);
+ if (!ctx)
+ return VBERROR_INVALID_GBB;
+
+ if (0 == sd->gbb->hwid_size) {
+ VB2_DEBUG("VbHWID(): invalid hwid size\n");
+ return VBERROR_SUCCESS; /* oddly enough! */
+ }
+
+ if (sd->gbb->hwid_size > max_size) {
+ VB2_DEBUG("VbDisplayDebugInfo(): invalid hwid offset/size\n");
+ return VBERROR_INVALID_PARAMETER;
}
-#else
- return VBERROR_INVALID_GBB;
-#endif
+ return VbGbbReadData(ctx, sd->gbb->hwid_offset,
+ sd->gbb->hwid_size, hwid);
+}
+
+static VbError_t VbGbbReadKey(struct vb2_context *ctx, uint32_t offset,
+ VbPublicKey **keyp)
+{
+ VbPublicKey hdr, *key;
+ VbError_t ret;
+ uint32_t size;
+
+ ret = VbGbbReadData(ctx, offset, sizeof(VbPublicKey), &hdr);
+ if (ret)
+ return ret;
+
+ /* Deal with a zero-size key (used in testing) */
+ size = hdr.key_offset + hdr.key_size;
+ if (size < sizeof(hdr))
+ size = sizeof(hdr);
+ key = malloc(size);
+ ret = VbGbbReadData(ctx, offset, size, key);
+ if (ret) {
+ free(key);
+ return ret;
+ }
+
+ *keyp = key;
return VBERROR_SUCCESS;
}
-VbError_t VbGbbReadHeader_static(VbCommonParams *cparams,
- GoogleBinaryBlockHeader *gbb)
+VbError_t VbGbbReadRootKey(struct vb2_context *ctx, VbPublicKey **keyp)
+{
+ struct vb2_shared_data *sd = vb2_get_sd(ctx);
+
+ return VbGbbReadKey(ctx, sd->gbb->rootkey_offset, keyp);
+}
+
+VbError_t VbGbbReadRecoveryKey(struct vb2_context *ctx, VbPublicKey **keyp)
{
- return VbRegionReadData(cparams, VB_REGION_GBB, 0,
- sizeof(GoogleBinaryBlockHeader), gbb);
+ struct vb2_shared_data *sd = vb2_get_sd(ctx);
+
+ return VbGbbReadKey(ctx, sd->gbb->recovery_key_offset, keyp);
}
diff --git a/firmware/lib/region-kernel.c b/firmware/lib/region-kernel.c
deleted file mode 100644
index 404c189d..00000000
--- a/firmware/lib/region-kernel.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * High-level firmware API for loading and verifying rewritable firmware.
- * (Firmware portion)
- */
-
-#include "2sysincludes.h"
-#include "2common.h"
-
-#include "sysincludes.h"
-#include "bmpblk_header.h"
-#include "region.h"
-#include "gbb_access.h"
-#include "gbb_header.h"
-#include "load_kernel_fw.h"
-#include "utility.h"
-#include "vboot_api.h"
-#include "vboot_struct.h"
-
-static VbError_t VbRegionReadGbb(VbCommonParams *cparams, uint32_t offset,
- uint32_t size, void *buf)
-{
- return VbRegionReadData(cparams, VB_REGION_GBB, offset, size, buf);
-}
-
-VbError_t VbRegionReadHWID(VbCommonParams *cparams, char *hwid,
- uint32_t max_size)
-{
- GoogleBinaryBlockHeader *gbb;
- VbError_t ret;
-
- if (!max_size)
- return VBERROR_INVALID_PARAMETER;
- *hwid = '\0';
- StrnAppend(hwid, "{INVALID}", max_size);
- if (!cparams)
- return VBERROR_INVALID_GBB;
-
- gbb = cparams->gbb;
-
- if (0 == gbb->hwid_size) {
- VB2_DEBUG("VbHWID(): invalid hwid size\n");
- return VBERROR_SUCCESS; /* oddly enough! */
- }
-
- if (gbb->hwid_size > max_size) {
- VB2_DEBUG("VbDisplayDebugInfo(): invalid hwid offset/size\n");
- return VBERROR_INVALID_PARAMETER;
- }
- ret = VbRegionReadGbb(cparams, gbb->hwid_offset, gbb->hwid_size, hwid);
- if (ret)
- return ret;
-
- return VBERROR_SUCCESS;
-}
-
-#define OUTBUF_LEN 128
-
-void VbRegionCheckVersion(VbCommonParams *cparams)
-{
- GoogleBinaryBlockHeader *gbb;
-
- if (!cparams)
- return;
-
- gbb = cparams->gbb;
-
- /*
- * If GBB flags is nonzero, complain because that's something that the
- * factory MUST fix before shipping. We only have to do this here,
- * because it's obvious that something is wrong if we're not displaying
- * screens from the GBB.
- */
- if (gbb->major_version == GBB_MAJOR_VER && gbb->minor_version >= 1 &&
- (gbb->flags != 0)) {
- uint32_t used = 0;
- char outbuf[OUTBUF_LEN];
-
- *outbuf = '\0';
- used += StrnAppend(outbuf + used, "gbb.flags is nonzero: 0x",
- OUTBUF_LEN - used);
- used += Uint64ToString(outbuf + used, OUTBUF_LEN - used,
- gbb->flags, 16, 8);
- used += StrnAppend(outbuf + used, "\n", OUTBUF_LEN - used);
- (void)VbExDisplayDebugInfo(outbuf);
- }
-}
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index 5bda94f9..7976170d 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -16,7 +16,6 @@
#include "gbb_access.h"
#include "gbb_header.h"
#include "load_kernel_fw.h"
-#include "region.h"
#include "rollback_index.h"
#include "utility.h"
#include "vb2_common.h"
@@ -234,16 +233,6 @@ VbError_t VbBootNormal(struct vb2_context *ctx, VbCommonParams *cparams)
return rv;
}
-/* This function is also used by tests */
-void VbApiKernelFree(VbCommonParams *cparams)
-{
- /* VbSelectAndLoadKernel() always allocates this, tests don't */
- if (cparams->gbb) {
- free(cparams->gbb);
- cparams->gbb = NULL;
- }
-}
-
static VbError_t vb2_kernel_setup(VbCommonParams *cparams,
VbSelectAndLoadKernelParams *kparams)
{
@@ -345,12 +334,10 @@ static VbError_t vb2_kernel_setup(VbCommonParams *cparams,
kparams->flags = 0;
memset(kparams->partition_guid, 0, sizeof(kparams->partition_guid));
- /* Read GBB header, since we'll needs flags from it */
- cparams->gbb = malloc(sizeof(*cparams->gbb));
- uint32_t retval = VbGbbReadHeader_static(cparams, cparams->gbb);
- if (retval)
- return retval;
- sd->gbb_flags = cparams->gbb->flags;
+ /* Point to GBB data from cparams */
+ sd->gbb = cparams->gbb_data;
+ sd->gbb_size = cparams->gbb_size;
+ sd->gbb_flags = sd->gbb->flags;
/* Read kernel version from the TPM. Ignore errors in recovery mode. */
if (RollbackKernelRead(&shared->kernel_version_tpm)) {
@@ -421,7 +408,6 @@ static void vb2_kernel_cleanup(struct vb2_context *ctx, VbCommonParams *cparams)
/* Free buffers */
free(unaligned_workbuf);
- VbApiKernelFree(cparams);
vb2_nv_commit(ctx);
@@ -530,7 +516,7 @@ VbError_t VbVerifyMemoryBootImage(VbCommonParams *cparams,
hash_only = 1;
} else {
/* Get recovery key. */
- retval = VbGbbReadRecoveryKey(cparams, &kernel_subkey);
+ retval = VbGbbReadRecoveryKey(&ctx, &kernel_subkey);
if (VBERROR_SUCCESS != retval) {
VB2_DEBUG("Gbb Read Recovery key failed.\n");
goto fail;
diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
index d3e3a6a2..ea36c1f1 100644
--- a/firmware/lib/vboot_display.c
+++ b/firmware/lib/vboot_display.c
@@ -15,7 +15,6 @@
#include "bmpblk_font.h"
#include "gbb_access.h"
#include "gbb_header.h"
-#include "region.h"
#include "utility.h"
#include "vboot_api.h"
#include "vboot_common.h"
@@ -274,7 +273,7 @@ const char *RecoveryReasonString(uint8_t code)
#define DEBUG_INFO_SIZE 512
-VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams)
+VbError_t VbDisplayDebugInfo(struct vb2_context *ctx)
{
struct vb2_shared_data *sd = vb2_get_sd(ctx);
VbSharedDataHeader *shared = sd->vbsd;
@@ -296,7 +295,7 @@ VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams)
disp_current_index, disp_disabled_idx_mask);
/* Add hardware ID */
- VbRegionReadHWID(cparams, hwid, sizeof(hwid));
+ VbGbbReadHWID(ctx, hwid, sizeof(hwid));
used += StrnAppend(buf + used, "HWID: ", DEBUG_INFO_SIZE - used);
used += StrnAppend(buf + used, hwid, DEBUG_INFO_SIZE - used);
@@ -371,7 +370,7 @@ VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams)
sd->gbb_flags, 16, 8);
/* Add sha1sum for Root & Recovery keys */
- ret = VbGbbReadRootKey(cparams, &key);
+ ret = VbGbbReadRootKey(ctx, &key);
if (!ret) {
FillInSha1Sum(sha1sum, key);
free(key);
@@ -381,7 +380,7 @@ VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams)
DEBUG_INFO_SIZE - used);
}
- ret = VbGbbReadRecoveryKey(cparams, &key);
+ ret = VbGbbReadRecoveryKey(ctx, &key);
if (!ret) {
FillInSha1Sum(sha1sum, key);
free(key);
@@ -413,8 +412,7 @@ VbError_t VbDisplayDebugInfo(struct vb2_context *ctx, VbCommonParams *cparams)
#define MAGIC_WORD "xyzzy"
static uint8_t MagicBuffer[MAGIC_WORD_LEN];
-VbError_t VbCheckDisplayKey(struct vb2_context *ctx, VbCommonParams *cparams,
- uint32_t key)
+VbError_t VbCheckDisplayKey(struct vb2_context *ctx, uint32_t key)
{
int i;
@@ -426,7 +424,7 @@ VbError_t VbCheckDisplayKey(struct vb2_context *ctx, VbCommonParams *cparams,
if ('\t' == key) {
/* Tab = display debug info */
- return VbDisplayDebugInfo(ctx, cparams);
+ return VbDisplayDebugInfo(ctx);
} else if (VB_KEY_LEFT == key || VB_KEY_RIGHT == key ||
VB_KEY_DOWN == key || VB_KEY_UP == key) {
/* Arrow keys = change localization */
diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c
index d298e68d..0200dccf 100644
--- a/firmware/lib/vboot_kernel.c
+++ b/firmware/lib/vboot_kernel.c
@@ -16,7 +16,6 @@
#include "2sha.h"
#include "cgptlib.h"
#include "cgptlib_internal.h"
-#include "region.h"
#include "gbb_access.h"
#include "gbb_header.h"
#include "gpt_misc.h"
@@ -464,7 +463,7 @@ VbError_t LoadKernel(struct vb2_context *ctx, LoadKernelParams *params,
struct vb2_packed_key *kernel_subkey;
if (kBootRecovery == shcall->boot_mode) {
/* Use the recovery key to verify the kernel */
- retval = VbGbbReadRecoveryKey(cparams,
+ retval = VbGbbReadRecoveryKey(ctx,
(VbPublicKey **)&recovery_key);
if (VBERROR_SUCCESS != retval)
goto load_kernel_exit;
diff --git a/firmware/lib/vboot_ui.c b/firmware/lib/vboot_ui.c
index 36c7cdf1..93bdf65a 100644
--- a/firmware/lib/vboot_ui.c
+++ b/firmware/lib/vboot_ui.c
@@ -16,7 +16,6 @@
#include "gbb_access.h"
#include "gbb_header.h"
#include "load_kernel_fw.h"
-#include "region.h"
#include "rollback_index.h"
#include "utility.h"
#include "vb2_common.h"
@@ -91,8 +90,7 @@ uint32_t VbTryUsb(struct vb2_context *ctx, VbCommonParams *cparams)
#define CONFIRM_KEY_DELAY 20 /* Check confirm screen keys every 20ms */
-int VbUserConfirms(struct vb2_context *ctx, VbCommonParams *cparams,
- uint32_t confirm_flags)
+int VbUserConfirms(struct vb2_context *ctx, uint32_t confirm_flags)
{
struct vb2_shared_data *sd = vb2_get_sd(ctx);
VbSharedDataHeader *shared = sd->vbsd;
@@ -146,7 +144,7 @@ int VbUserConfirms(struct vb2_context *ctx, VbCommonParams *cparams,
return 1;
}
}
- VbCheckDisplayKey(ctx, cparams, key);
+ VbCheckDisplayKey(ctx, key);
}
VbExSleepMs(CONFIRM_KEY_DELAY);
}
@@ -216,7 +214,7 @@ VbError_t vb2_developer_ui(struct vb2_context *ctx, VbCommonParams *cparams)
VbExDisplayDebugInfo(dev_disable_msg);
/* Ignore space in VbUserConfirms()... */
- switch (VbUserConfirms(ctx, cparams, 0)) {
+ switch (VbUserConfirms(ctx, 0)) {
case 1:
VB2_DEBUG("leaving dev-mode\n");
vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1);
@@ -278,7 +276,7 @@ VbError_t vb2_developer_ui(struct vb2_context *ctx, VbCommonParams *cparams)
VbDisplayScreen(ctx,
VB_SCREEN_DEVELOPER_TO_NORM, 0);
/* Ignore space in VbUserConfirms()... */
- switch (VbUserConfirms(ctx, cparams, 0)) {
+ switch (VbUserConfirms(ctx, 0)) {
case 1:
VB2_DEBUG("leaving dev-mode\n");
vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST,
@@ -360,7 +358,7 @@ VbError_t vb2_developer_ui(struct vb2_context *ctx, VbCommonParams *cparams)
break;
default:
VB2_DEBUG("VbBootDeveloper() - pressed key %d\n", key);
- VbCheckDisplayKey(ctx, cparams, key);
+ VbCheckDisplayKey(ctx, key);
break;
}
} while(vb2_audio_looping());
@@ -429,7 +427,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
VB2_DEBUG("VbBootRecovery() waiting for manual recovery\n");
while (1) {
key = VbExKeyboardRead();
- VbCheckDisplayKey(ctx, cparams, key);
+ VbCheckDisplayKey(ctx, key);
if (VbWantShutdown(ctx, key))
return VBERROR_SHUTDOWN_REQUESTED;
VbExSleepMs(REC_KEY_DELAY);
@@ -499,8 +497,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
uint32_t vbc_flags =
VB_CONFIRM_SPACE_MEANS_NO |
VB_CONFIRM_MUST_TRUST_KEYBOARD;
- switch (VbUserConfirms(ctx, cparams,
- vbc_flags)) {
+ switch (VbUserConfirms(ctx, vbc_flags)) {
case 1:
VB2_DEBUG("Enabling dev-mode...\n");
if (TPM_SUCCESS != SetVirtualDevMode(1))
@@ -524,7 +521,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
break;
}
} else {
- VbCheckDisplayKey(ctx, cparams, key);
+ VbCheckDisplayKey(ctx, key);
}
if (VbWantShutdown(ctx, key))
return VBERROR_SHUTDOWN_REQUESTED;
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index a8247a2c..6ca602a7 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -14,7 +14,6 @@
#include "gbb_access.h"
#include "gbb_header.h"
#include "load_kernel_fw.h"
-#include "region.h"
#include "rollback_index.h"
#include "utility.h"
#include "vb2_common.h"
@@ -245,8 +244,7 @@ static const uint32_t VB_MENU_TO_SCREEN_MAP[] = {
VB_SCREEN_TO_NORM_CONFIRMED,
};
-VbError_t vb2_draw_current_screen(struct vb2_context *ctx,
- VbCommonParams *cparams) {
+VbError_t vb2_draw_current_screen(struct vb2_context *ctx) {
uint32_t screen;
if (current_menu < VB_MENU_COUNT)
screen = VB_MENU_TO_SCREEN_MAP[current_menu];
@@ -645,7 +643,7 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
vb2_set_disabled_idx_mask(shared->flags);
/* Show the dev mode warning screen */
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
/* Get audio/delay context */
vb2_audio_start(ctx);
@@ -710,21 +708,21 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
return VBERROR_SUCCESS;
} else {
/* Show dev mode warning screen again */
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
}
}
break;
case VB_BUTTON_VOL_UP_SHORT_PRESS:
case VB_KEY_UP:
vb2_update_selection(key);
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
/* reset 30 second timer */
vb2_audio_start(ctx);
break;
case VB_BUTTON_VOL_DOWN_SHORT_PRESS:
case VB_KEY_DOWN:
vb2_update_selection(key);
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
/* reset 30 second timer */
vb2_audio_start(ctx);
break;
@@ -740,7 +738,7 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
ret = vb2_update_menu(ctx);
vb2_set_disabled_idx_mask(shared->flags);
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
/* Probably shutting down */
if (ret != VBERROR_SUCCESS) {
@@ -757,7 +755,7 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
/* Display debug information */
if (current_menu == VB_MENU_DEV_WARNING &&
current_menu_idx == VB_WARN_DBG_INFO) {
- VbDisplayDebugInfo(ctx, cparams);
+ VbDisplayDebugInfo(ctx);
}
/* Boot Legacy mode */
@@ -797,8 +795,7 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
* Show dev mode warning screen
* again
*/
- vb2_draw_current_screen(ctx,
- cparams);
+ vb2_draw_current_screen(ctx);
}
}
@@ -933,7 +930,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
if (key == VB_BUTTON_POWER_SHORT_PRESS)
return VBERROR_SHUTDOWN_REQUESTED;
else {
- VbCheckDisplayKey(ctx, cparams, key);
+ VbCheckDisplayKey(ctx, key);
if (VbWantShutdownMenu(ctx))
return VBERROR_SHUTDOWN_REQUESTED;
}
@@ -970,7 +967,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
if (current_menu != VB_MENU_RECOVERY ||
current_menu_idx != VB_RECOVERY_DBG_INFO) {
if (retval == VBERROR_NO_DISK_FOUND)
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
else {
VbDisplayScreen(ctx,
VB_SCREEN_RECOVERY_NO_GOOD, 0);
@@ -1005,7 +1002,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
}
vb2_update_selection(key);
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
break;
case VB_BUTTON_VOL_UP_DOWN_COMBO_PRESS:
/*
@@ -1018,7 +1015,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
if (ret != VBERROR_SUCCESS)
return ret;
vb2_set_disabled_idx_mask(shared->flags);
- vb2_draw_current_screen(ctx, cparams);
+ vb2_draw_current_screen(ctx);
}
break;
case VB_BUTTON_POWER_SHORT_PRESS:
@@ -1056,8 +1053,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
* printed.
*/
if (retval == VBERROR_NO_DISK_FOUND)
- vb2_draw_current_screen(ctx,
- cparams);
+ vb2_draw_current_screen(ctx);
else {
VbDisplayScreen(ctx,
VB_SCREEN_RECOVERY_NO_GOOD, 0);
@@ -1078,7 +1074,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx, VbCommonParams *cparams)
/* Display debug information */
if (current_menu == VB_MENU_RECOVERY &&
current_menu_idx == VB_RECOVERY_DBG_INFO) {
- VbDisplayDebugInfo(ctx, cparams);
+ VbDisplayDebugInfo(ctx);
}
/* Confirm going into developer mode */
diff --git a/firmware/stub/vboot_api_stub_region.c b/firmware/stub/vboot_api_stub_region.c
deleted file mode 100644
index f462fe4e..00000000
--- a/firmware/stub/vboot_api_stub_region.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Stub implementations of region API function.
- */
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#include "vboot_api.h"
-
-VbError_t VbExRegionRead(VbCommonParams *cparams,
- enum vb_firmware_region region, uint32_t offset,
- uint32_t size, void *buf)
-{
- return VBERROR_SUCCESS;
-}
diff --git a/tests/ec_sync_tests.c b/tests/ec_sync_tests.c
index 332290ae..3dcc6803 100644
--- a/tests/ec_sync_tests.c
+++ b/tests/ec_sync_tests.c
@@ -29,7 +29,6 @@
static VbCommonParams cparams;
static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data;
-static GoogleBinaryBlockHeader gbb;
static int mock_in_rw;
static VbError_t in_rw_retval;
@@ -69,13 +68,6 @@ static void ResetMocks(void)
memset(&cparams, 0, sizeof(cparams));
cparams.shared_data_size = sizeof(shared_data);
cparams.shared_data_blob = shared_data;
- cparams.gbb_data = &gbb;
-
- memset(&gbb, 0, sizeof(gbb));
- gbb.major_version = GBB_MAJOR_VER;
- gbb.minor_version = GBB_MINOR_VER;
- gbb.flags = 0;
- cparams.gbb = &gbb;
memset(&ctx, 0, sizeof(ctx));
ctx.workbuf = workbuf;
diff --git a/tests/vboot_api_devmode_tests.c b/tests/vboot_api_devmode_tests.c
index 330a89ac..916cf068 100644
--- a/tests/vboot_api_devmode_tests.c
+++ b/tests/vboot_api_devmode_tests.c
@@ -100,7 +100,6 @@ static struct vb2_context ctx;
static struct vb2_shared_data *sd;
static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
static VbSharedDataHeader* shared = (VbSharedDataHeader*)shared_data;
-static GoogleBinaryBlockHeader gbb;
static int current_time;
static uint64_t current_ticks;
static int current_event;
@@ -118,8 +117,6 @@ extern int audio_open_count;
static void ResetMocks(void)
{
memset(&cparams, 0, sizeof(cparams));
- cparams.gbb_data = &gbb;
- cparams.gbb = &gbb;
memset(&ctx, 0, sizeof(ctx));
ctx.workbuf = workbuf;
@@ -134,11 +131,6 @@ static void ResetMocks(void)
VbSharedDataInit(shared, sizeof(shared_data));
shared->fw_keyblock_flags = 0xABCDE0;
- memset(&gbb, 0, sizeof(gbb));
- gbb.major_version = GBB_MAJOR_VER;
- gbb.minor_version = GBB_MINOR_VER;
- gbb.flags = 0;
-
current_ticks = 0;
current_time = 0;
diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c
index 04e64667..92041207 100644
--- a/tests/vboot_api_kernel2_tests.c
+++ b/tests/vboot_api_kernel2_tests.c
@@ -28,7 +28,6 @@
static VbCommonParams cparams;
static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data;
-static GoogleBinaryBlockHeader gbb;
static LoadKernelParams lkp;
static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE];
static struct vb2_context ctx;
@@ -59,13 +58,6 @@ extern struct RollbackSpaceFwmp *VbApiKernelGetFwmp(void);
static void ResetMocks(void)
{
memset(&cparams, 0, sizeof(cparams));
- cparams.gbb_data = &gbb;
- cparams.gbb = &gbb;
-
- memset(&gbb, 0, sizeof(gbb));
- gbb.major_version = GBB_MAJOR_VER;
- gbb.minor_version = GBB_MINOR_VER;
- gbb.flags = 0;
memset(VbApiKernelGetFwmp(), 0, sizeof(struct RollbackSpaceFwmp));
@@ -212,48 +204,48 @@ static void VbUserConfirmsTest(void)
ResetMocks();
shutdown_request_calls_left = 1;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, 0), -1, "Shutdown requested");
+ TEST_EQ(VbUserConfirms(&ctx, 0), -1, "Shutdown requested");
ResetMocks();
mock_keypress[0] = VB_BUTTON_POWER_SHORT_PRESS;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, 0), -1, "Shutdown requested");
+ TEST_EQ(VbUserConfirms(&ctx, 0), -1, "Shutdown requested");
ResetMocks();
mock_keypress[0] = '\r';
- TEST_EQ(VbUserConfirms(&ctx, &cparams, 0), 1, "Enter");
+ TEST_EQ(VbUserConfirms(&ctx, 0), 1, "Enter");
ResetMocks();
mock_keypress[0] = 0x1b;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, 0), 0, "Esc");
+ TEST_EQ(VbUserConfirms(&ctx, 0), 0, "Esc");
ResetMocks();
mock_keypress[0] = ' ';
shutdown_request_calls_left = 1;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, VB_CONFIRM_SPACE_MEANS_NO), 0,
+ TEST_EQ(VbUserConfirms(&ctx, VB_CONFIRM_SPACE_MEANS_NO), 0,
"Space means no");
ResetMocks();
mock_keypress[0] = ' ';
shutdown_request_calls_left = 1;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, 0), -1, "Space ignored");
+ TEST_EQ(VbUserConfirms(&ctx, 0), -1, "Space ignored");
ResetMocks();
mock_keypress[0] = '\r';
mock_keyflags[0] = VB_KEY_FLAG_TRUSTED_KEYBOARD;
- TEST_EQ(VbUserConfirms(&ctx, &cparams, VB_CONFIRM_MUST_TRUST_KEYBOARD),
+ TEST_EQ(VbUserConfirms(&ctx, VB_CONFIRM_MUST_TRUST_KEYBOARD),
1, "Enter with trusted keyboard");
ResetMocks();
mock_keypress[0] = '\r'; /* untrusted */
mock_keypress[1] = ' ';
- TEST_EQ(VbUserConfirms(&ctx, &cparams,
+ TEST_EQ(VbUserConfirms(&ctx,
VB_CONFIRM_SPACE_MEANS_NO |
VB_CONFIRM_MUST_TRUST_KEYBOARD),
0, "Untrusted keyboard");
ResetMocks();
mock_switches[0] = VB_INIT_FLAG_REC_BUTTON_PRESSED;
- TEST_EQ(VbUserConfirms(&ctx, &cparams,
+ TEST_EQ(VbUserConfirms(&ctx,
VB_CONFIRM_SPACE_MEANS_NO |
VB_CONFIRM_MUST_TRUST_KEYBOARD),
1, "Recovery button");
@@ -265,7 +257,7 @@ static void VbUserConfirmsTest(void)
mock_keypress[3] = ' ';
mock_switches[0] = VB_INIT_FLAG_REC_BUTTON_PRESSED;
mock_switches_are_stuck = 1;
- TEST_EQ(VbUserConfirms(&ctx, &cparams,
+ TEST_EQ(VbUserConfirms(&ctx,
VB_CONFIRM_SPACE_MEANS_NO |
VB_CONFIRM_MUST_TRUST_KEYBOARD),
0, "Recovery button stuck");
diff --git a/tests/vboot_api_kernel5_tests.c b/tests/vboot_api_kernel5_tests.c
index fc54eb7a..a831e7f5 100644
--- a/tests/vboot_api_kernel5_tests.c
+++ b/tests/vboot_api_kernel5_tests.c
@@ -34,7 +34,8 @@ static VbCommonParams cparams;
static VbSelectAndLoadKernelParams kparams;
static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data;
-static GoogleBinaryBlockHeader gbb;
+static uint8_t gbb_buf[4096];
+static GoogleBinaryBlockHeader *gbb = (GoogleBinaryBlockHeader *)gbb_buf;
static uint8_t kernel_buffer[80000];
static int key_block_verify_fail; /* 0=ok, 1=sig, 2=hash */
@@ -55,15 +56,17 @@ static void ResetMocks(void)
memset(&cparams, 0, sizeof(cparams));
cparams.shared_data_size = sizeof(shared_data);
cparams.shared_data_blob = shared_data;
- cparams.gbb_data = &gbb;
- cparams.gbb_size = sizeof(gbb);
+ cparams.gbb_data = gbb_buf;
+ cparams.gbb_size = sizeof(gbb_buf);
memset(&kparams, 0, sizeof(kparams));
- memset(&gbb, 0, sizeof(gbb));
- gbb.major_version = GBB_MAJOR_VER;
- gbb.minor_version = GBB_MINOR_VER;
- gbb.flags = 0;
+ memset(gbb_buf, 0, sizeof(gbb_buf));
+ gbb->major_version = GBB_MAJOR_VER;
+ gbb->minor_version = GBB_MINOR_VER;
+ gbb->flags = 0;
+ gbb->rootkey_offset = sizeof(*gbb);
+ gbb->rootkey_size = sizeof(VbPublicKey);
memset(&ctx, 0, sizeof(ctx));
ctx.workbuf = workbuf;
@@ -223,7 +226,7 @@ static void VerifyMemoryBootImageTest(void)
/* Key Block Hash Failure */
ResetMocks();
shared->flags = VBSD_BOOT_DEV_SWITCH_ON;
- gbb.flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
+ gbb->flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
key_block_verify_fail = 1;
TEST_EQ(VbVerifyMemoryBootImage(&cparams, &kparams, kernel_buffer,
kernel_buffer_size),
@@ -256,7 +259,7 @@ static void VerifyMemoryBootImageTest(void)
kbh.key_block_flags = KEY_BLOCK_FLAG_DEVELOPER_0 |
KEY_BLOCK_FLAG_RECOVERY_1;
copy_kbh();
- gbb.flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
+ gbb->flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
shared->flags = VBSD_BOOT_DEV_SWITCH_ON;
TEST_EQ(VbVerifyMemoryBootImage(&cparams, &kparams, kernel_buffer,
kernel_buffer_size),
@@ -269,7 +272,7 @@ static void VerifyMemoryBootImageTest(void)
KEY_BLOCK_FLAG_RECOVERY_0;
copy_kbh();
shared->flags = VBSD_BOOT_DEV_SWITCH_ON;
- gbb.flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
+ gbb->flags = GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP;
TEST_EQ(VbVerifyMemoryBootImage(&cparams, &kparams, kernel_buffer,
kernel_buffer_size),
VBERROR_SUCCESS,
diff --git a/tests/vboot_detach_menu_tests.c b/tests/vboot_detach_menu_tests.c
index 0e3cc3b0..db04f6ba 100644
--- a/tests/vboot_detach_menu_tests.c
+++ b/tests/vboot_detach_menu_tests.c
@@ -30,7 +30,6 @@
static VbCommonParams cparams;
static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data;
-static GoogleBinaryBlockHeader gbb;
static LoadKernelParams lkp;
static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE];
static struct vb2_context ctx;
@@ -61,13 +60,6 @@ extern struct RollbackSpaceFwmp *VbApiKernelGetFwmp(void);
static void ResetMocks(void)
{
memset(&cparams, 0, sizeof(cparams));
- cparams.gbb_data = &gbb;
- cparams.gbb = &gbb;
-
- memset(&gbb, 0, sizeof(gbb));
- gbb.major_version = GBB_MAJOR_VER;
- gbb.minor_version = GBB_MINOR_VER;
- gbb.flags = 0;
memset(VbApiKernelGetFwmp(), 0, sizeof(struct RollbackSpaceFwmp));
diff --git a/tests/vboot_display_tests.c b/tests/vboot_display_tests.c
index 7ddc28e9..a6d2b9f4 100644
--- a/tests/vboot_display_tests.c
+++ b/tests/vboot_display_tests.c
@@ -15,9 +15,9 @@
#include "2misc.h"
#include "2nvstorage.h"
#include "bmpblk_font.h"
+#include "gbb_access.h"
#include "gbb_header.h"
#include "host_common.h"
-#include "region.h"
#include "test_common.h"
#include "vboot_common.h"
#include "vboot_display.h"
@@ -31,6 +31,7 @@ static char gbb_data[4096 + sizeof(GoogleBinaryBlockHeader)];
static GoogleBinaryBlockHeader *gbb = (GoogleBinaryBlockHeader *)gbb_data;
static char debug_info[4096];
static struct vb2_context ctx;
+struct vb2_shared_data *sd;
static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE];
static uint32_t mock_localization_count;
@@ -55,12 +56,6 @@ static void ResetMocks(void)
memset(&cparams, 0, sizeof(cparams));
cparams.gbb_data = gbb;
cparams.gbb_size = sizeof(gbb_data);
-
- /*
- * Note, VbApiKernelFree() expects this to be allocated by
- * malloc(), so we cannot just assign it staticly.
- */
- cparams.gbb = malloc(sizeof(*gbb));
gbb->header_size = sizeof(*gbb);
gbb->rootkey_offset = gbb_used;
gbb->rootkey_size = 64;
@@ -68,7 +63,6 @@ static void ResetMocks(void)
gbb->recovery_key_offset = gbb_used;
gbb->recovery_key_size = 64;
gbb_used += 64;
- memcpy(cparams.gbb, gbb, sizeof(*gbb));
memset(&ctx, 0, sizeof(ctx));
ctx.workbuf = workbuf;
@@ -76,8 +70,10 @@ static void ResetMocks(void)
vb2_init_context(&ctx);
vb2_nv_init(&ctx);
- struct vb2_shared_data *sd = vb2_get_sd(&ctx);
+ sd = vb2_get_sd(&ctx);
sd->vbsd = shared;
+ sd->gbb = (struct vb2_gbb_header *)gbb_data;
+ sd->gbb_size = sizeof(gbb_data);
memset(&shared_data, 0, sizeof(shared_data));
VbSharedDataInit(shared, sizeof(shared_data));
@@ -106,7 +102,7 @@ VbError_t VbExDisplayDebugInfo(const char *info_str)
/* Test displaying debug info */
static void DebugInfoTest(void)
{
- char hwid[VB_REGION_HWID_LEN];
+ char hwid[256];
int i;
/* Recovery string should be non-null for any code */
@@ -115,82 +111,72 @@ static void DebugInfoTest(void)
/* HWID should come from the gbb */
ResetMocks();
- VbRegionReadHWID(&cparams, hwid, sizeof(hwid));
+ VbGbbReadHWID(&ctx, hwid, sizeof(hwid));
TEST_EQ(strcmp(hwid, "Test HWID"), 0, "HWID");
- VbApiKernelFree(&cparams);
ResetMocks();
- cparams.gbb_size = 0;
- VbRegionReadHWID(&cparams, hwid, sizeof(hwid));
+ sd->gbb_size = 0;
+ VbGbbReadHWID(&ctx, hwid, sizeof(hwid));
TEST_EQ(strcmp(hwid, "{INVALID}"), 0, "HWID bad gbb");
- VbApiKernelFree(&cparams);
ResetMocks();
- cparams.gbb->hwid_size = 0;
- VbRegionReadHWID(&cparams, hwid, sizeof(hwid));
+ sd->gbb->hwid_size = 0;
+ VbGbbReadHWID(&ctx, hwid, sizeof(hwid));
TEST_EQ(strcmp(hwid, "{INVALID}"), 0, "HWID missing");
- VbApiKernelFree(&cparams);
ResetMocks();
- cparams.gbb->hwid_offset = cparams.gbb_size + 1;
- VbRegionReadHWID(&cparams, hwid, sizeof(hwid));
+ sd->gbb->hwid_offset = sd->gbb_size + 1;
+ VbGbbReadHWID(&ctx, hwid, sizeof(hwid));
TEST_EQ(strcmp(hwid, "{INVALID}"), 0, "HWID past end");
- VbApiKernelFree(&cparams);
ResetMocks();
- cparams.gbb->hwid_size = cparams.gbb_size;
- VbRegionReadHWID(&cparams, hwid, sizeof(hwid));
+ sd->gbb->hwid_size = sd->gbb_size;
+ VbGbbReadHWID(&ctx, hwid, sizeof(hwid));
TEST_EQ(strcmp(hwid, "{INVALID}"), 0, "HWID overflow");
- VbApiKernelFree(&cparams);
/* Display debug info */
ResetMocks();
- VbDisplayDebugInfo(&ctx, &cparams);
+ VbDisplayDebugInfo(&ctx);
TEST_NEQ(*debug_info, '\0', "Some debug info was displayed");
- VbApiKernelFree(&cparams);
}
/* Test display key checking */
static void DisplayKeyTest(void)
{
ResetMocks();
- VbCheckDisplayKey(&ctx, &cparams, 'q');
+ VbCheckDisplayKey(&ctx, 'q');
TEST_EQ(*debug_info, '\0', "DisplayKey q = does nothing");
- VbApiKernelFree(&cparams);
ResetMocks();
- VbCheckDisplayKey(&ctx, &cparams, '\t');
+ VbCheckDisplayKey(&ctx, '\t');
TEST_NEQ(*debug_info, '\0', "DisplayKey tab = display");
- VbApiKernelFree(&cparams);
/* Toggle localization */
ResetMocks();
vb2_nv_set(&ctx, VB2_NV_LOCALIZATION_INDEX, 0);
- VbCheckDisplayKey(&ctx, &cparams, VB_KEY_DOWN);
+ VbCheckDisplayKey(&ctx, VB_KEY_DOWN);
TEST_EQ(vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX), 2,
"DisplayKey up");
- VbCheckDisplayKey(&ctx, &cparams, VB_KEY_LEFT);
+ VbCheckDisplayKey(&ctx, VB_KEY_LEFT);
vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX);
TEST_EQ(vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX), 1,
"DisplayKey left");
- VbCheckDisplayKey(&ctx, &cparams, VB_KEY_RIGHT);
+ VbCheckDisplayKey(&ctx, VB_KEY_RIGHT);
vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX);
TEST_EQ(vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX), 2,
"DisplayKey right");
- VbCheckDisplayKey(&ctx, &cparams, VB_KEY_UP);
+ VbCheckDisplayKey(&ctx, VB_KEY_UP);
vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX);
TEST_EQ(vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX), 0,
"DisplayKey up");
- VbApiKernelFree(&cparams);
/* Reset localization if localization count is invalid */
ResetMocks();
vb2_nv_set(&ctx, VB2_NV_LOCALIZATION_INDEX, 1);
mock_localization_count = 0xffffffff;
- VbCheckDisplayKey(&ctx, &cparams, VB_KEY_UP);
+ VbCheckDisplayKey(&ctx, VB_KEY_UP);
TEST_EQ(vb2_nv_get(&ctx, VB2_NV_LOCALIZATION_INDEX), 0,
"DisplayKey invalid");
- VbApiKernelFree(&cparams);
}
int main(void)
diff --git a/tests/vboot_kernel_tests.c b/tests/vboot_kernel_tests.c
index a5919780..c6798d2c 100644
--- a/tests/vboot_kernel_tests.c
+++ b/tests/vboot_kernel_tests.c
@@ -146,9 +146,6 @@ static void ResetMocks(void)
shared->kernel_version_tpm = 0x20001;
memset(&cparams, '\0', sizeof(cparams));
- cparams.gbb = gbb;
- cparams.gbb_data = gbb;
- cparams.gbb_size = sizeof(gbb_data);
memset(&lkp, 0, sizeof(lkp));
lkp.bytes_per_lba = 512;
@@ -185,6 +182,8 @@ static void ResetMocks(void)
struct vb2_shared_data *sd = vb2_get_sd(&ctx);
sd->vbsd = shared;
+ sd->gbb = (struct vb2_gbb_header *)gbb_data;
+ sd->gbb_size = sizeof(gbb_data);
// TODO: more workbuf fields - flags, secdata, secdatak
}
diff --git a/tests/vboot_region_tests.c b/tests/vboot_region_tests.c
deleted file mode 100644
index a08daede..00000000
--- a/tests/vboot_region_tests.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Tests for vboot region API
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "bmpblk_font.h"
-#include "gbb_header.h"
-#include "host_common.h"
-#include "rollback_index.h"
-#include "test_common.h"
-#include "vboot_common.h"
-#include "vboot_struct.h"
-
-typedef struct VbNvContext VbNvContext;
-
-/* Mock data */
-static VbCommonParams cparams;
-static VbSelectFirmwareParams fparams;
-VbSelectAndLoadKernelParams kparams;
-static char gbb_data[4096 + sizeof(GoogleBinaryBlockHeader)];
-static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
-static VbSharedDataHeader* shared = (VbSharedDataHeader*)shared_data;
-/* Mock TPM versions */
-static uint32_t mock_tpm_version;
-static uint32_t mock_lf_tpm_version; /* TPM version set by LoadFirmware() */
-static uint32_t mock_seen_region;
-/* Mock return values, so we can simulate errors */
-static VbError_t mock_lf_retval;
-
-#define COMPRESSED_SIZE 200
-#define ORIGINAL_SIZE 400
-
-/* Reset mock data (for use before each test) */
-static void ResetMocks(void) {
- GoogleBinaryBlockHeader *gbb;
- BmpBlockHeader *bhdr;
- ImageInfo *image_info;
- ScreenLayout *layout;
- int gbb_used;
-
- memset(&cparams, 0, sizeof(cparams));
- cparams.shared_data_size = sizeof(shared_data);
- cparams.shared_data_blob = shared_data;
-
- memset(&fparams, 0, sizeof(fparams));
-
- memset(gbb_data, 0, sizeof(gbb_data));
- gbb = (GoogleBinaryBlockHeader *)gbb_data;
- gbb->major_version = GBB_MAJOR_VER;
- gbb->minor_version = GBB_MINOR_VER;
- gbb->flags = 0;
- gbb_used = sizeof(GoogleBinaryBlockHeader);
-
- gbb->hwid_offset = gbb_used;
- strcpy(gbb_data + gbb->hwid_offset, "Test HWID");
- gbb->hwid_size = strlen(gbb_data + gbb->hwid_offset) + 1;
- gbb_used = (gbb_used + gbb->hwid_size + 7) & ~7;
-
- gbb->bmpfv_offset = gbb_used;
- bhdr = (BmpBlockHeader *)(gbb_data + gbb->bmpfv_offset);
- gbb->bmpfv_size = sizeof(BmpBlockHeader);
- gbb_used = (gbb_used + gbb->bmpfv_size + 7) & ~7;
- memcpy(bhdr->signature, BMPBLOCK_SIGNATURE, BMPBLOCK_SIGNATURE_SIZE);
- bhdr->major_version = BMPBLOCK_MAJOR_VERSION;
- bhdr->minor_version = BMPBLOCK_MINOR_VERSION;
- bhdr->number_of_localizations = 3;
- bhdr->number_of_screenlayouts = 1;
-
- layout = (ScreenLayout *)(gbb_data + gbb_used);
- gbb_used += sizeof(*layout);
- layout->images[0].x = 1;
- layout->images[0].image_info_offset = gbb_used - gbb->bmpfv_offset;
-
- /* First image is uncompressed */
- image_info = (ImageInfo *)(gbb_data + gbb_used);
- image_info->format = FORMAT_BMP;
- image_info->compressed_size = ORIGINAL_SIZE;
- image_info->original_size = ORIGINAL_SIZE;
- image_info->compression = COMPRESS_NONE;
- gbb_used += sizeof(*image_info);
- strcpy(gbb_data + gbb_used, "original");
- gbb_used += ORIGINAL_SIZE;
-
- /* Second image is compressed */
- layout->images[1].image_info_offset = gbb_used - gbb->bmpfv_offset;
- layout->images[1].x = 2;
- image_info = (ImageInfo *)(gbb_data + gbb_used);
- image_info->format = FORMAT_BMP;
- image_info->compressed_size = COMPRESSED_SIZE;
- image_info->original_size = ORIGINAL_SIZE;
- image_info->compression = COMPRESS_LZMA1;
- gbb_used += sizeof(*image_info) + COMPRESSED_SIZE;
-
- memset(&shared_data, 0, sizeof(shared_data));
- VbSharedDataInit(shared, sizeof(shared_data));
- shared->fw_keyblock_flags = 0xABCDE0;
-
- mock_tpm_version = mock_lf_tpm_version = 0x20004;
- shared->fw_version_tpm_start = mock_tpm_version;
- mock_lf_retval = 0;
- mock_seen_region = 0;
-}
-
-/****************************************************************************/
-/* Mocked verification functions */
-
-VbError_t VbExNvStorageRead(uint8_t* buf) {
- return VBERROR_SUCCESS;
-}
-
-VbError_t VbExNvStorageWrite(const uint8_t* buf) {
- return VBERROR_SUCCESS;
-}
-
-VbError_t VbExRegionRead(VbCommonParams *cparams,
- enum vb_firmware_region region, uint32_t offset,
- uint32_t size, void *buf)
-{
- if (region != VB_REGION_GBB)
- return VBERROR_UNSUPPORTED_REGION;
- mock_seen_region |= 1 << region;
- if (offset + size > sizeof(gbb_data))
- return VBERROR_REGION_READ_INVALID;
- memcpy(buf, gbb_data + offset, size);
- return VBERROR_SUCCESS;
-}
-
-VbError_t VbExDisplayImage(uint32_t x, uint32_t y,
- void *buffer, uint32_t buffersize)
-{
- switch (x) {
- case 1:
- TEST_STR_EQ(buffer, "original", " uncompressed image");
- break;
- case 2:
- TEST_STR_EQ(buffer, "decompressed", " compressed image");
- break;
- default:
- TEST_STR_EQ(buffer, "invalid", " correct image");
- break;
- }
- return VBERROR_SUCCESS;
-}
-
-VbError_t VbExDecompress(void *inbuf, uint32_t in_size,
- uint32_t compression_type,
- void *outbuf, uint32_t *out_size)
-{
- *out_size = ORIGINAL_SIZE;
- strcpy(outbuf, "decompressed");
- return VBERROR_SUCCESS;
-}
-
-int LoadFirmware(VbCommonParams *cparams, VbSelectFirmwareParams *fparams,
- VbNvContext *vnc) {
- shared->fw_version_tpm = mock_lf_tpm_version;
- TEST_PTR_NEQ(cparams->gbb, NULL, " GBB allocated");
- return mock_lf_retval;
-}
-
-/****************************************************************************/
-
-static void VbRegionReadTest(void) {
- /* Should read GBB */
- ResetMocks();
- TEST_TRUE(1, "Normal call");
- TEST_EQ(VbSelectFirmware(&cparams, &fparams), VBERROR_SUCCESS,
- " Success");
- TEST_EQ(mock_seen_region, 1 << VB_REGION_GBB, " GBB region");
- TEST_PTR_EQ(cparams.gbb, NULL, " GBB free");
-
- ResetMocks();
- TEST_EQ(VbSelectAndLoadKernel(&cparams, &kparams),
- VBERROR_NO_DISK_FOUND, "Kernel");
- TEST_PTR_EQ(cparams.gbb, NULL, " GBB free");
- TEST_PTR_EQ(cparams.bmp, NULL, " BMP free");
-
- ResetMocks();
- shared->flags |= VBSD_BOOT_DEV_SWITCH_ON;
- TEST_EQ(VbSelectAndLoadKernel(&cparams, &kparams),
- VBERROR_NO_DISK_FOUND, "Kernel");
-}
-
-int main(int argc, char* argv[])
-{
- VbRegionReadTest();
-
- return gTestSuccess ? 0 : 255;
-}
diff --git a/utility/load_kernel_test.c b/utility/load_kernel_test.c
index 481e78ce..da1667b8 100644
--- a/utility/load_kernel_test.c
+++ b/utility/load_kernel_test.c
@@ -163,7 +163,7 @@ int main(int argc, char* argv[]) {
/* Initialize the GBB */
cparams.gbb_size = sizeof(GoogleBinaryBlockHeader) + key_size;
- cparams.gbb = gbb = (GoogleBinaryBlockHeader*)malloc(cparams.gbb_size);
+ cparams.gbb_data = gbb = (GoogleBinaryBlockHeader*)malloc(cparams.gbb_size);
memset(gbb, 0, cparams.gbb_size);
memcpy(gbb->signature, GBB_SIGNATURE, GBB_SIGNATURE_SIZE);
gbb->major_version = GBB_MAJOR_VER;