diff options
author | Joel Kitching <kitching@google.com> | 2019-05-23 15:33:54 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-06-07 22:40:03 +0000 |
commit | 3eb00efa4eb30e02d1b3197dafc5975fdcbe5914 (patch) | |
tree | a60cece3b500976279a32bb7e71d4ba993d4400e /firmware/lib/region-init.c | |
parent | 96d5a58cbe65d762c64dc0e8f5ecc7af397015a4 (diff) | |
download | vboot-3eb00efa4eb30e02d1b3197dafc5975fdcbe5914.tar.gz |
vboot: rewrite GBB functions and API
Old vboot1-style GBB accessor functions were awkwardly located
within region-init.c.
Rewrite GBB accessor functions for vboot2, and formally expose
HWID retrieval function via vboot2 API. workbuf is used for
key retrieval functions, while a buffer provided by the caller
is used for HWID retrieval function.
Reintroduce vboot_display_tests to `make runtests` test suite.
Move GBB tests from vboot_display_tests to vb2_gbb_tests.
Properly propagate vb2_workbuf objects within the function call
stack (vb2_load_partition).
BUG=b:124141368, chromium:954774
TEST=Build and flash to eve, check that Chrome OS boots
TEST=Build with CL:1627469 applied, check HWID
TEST=make clean && make runtests
BRANCH=none
Change-Id: I398d1329f0b092de35aac73d98dfd9aee6e4e7de
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1584488
Tested-by: Joel Kitching <kitching@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Commit-Queue: Jason Clinton <jclinton@chromium.org>
Diffstat (limited to 'firmware/lib/region-init.c')
-rw-r--r-- | firmware/lib/region-init.c | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/firmware/lib/region-init.c b/firmware/lib/region-init.c deleted file mode 100644 index 9e3c2bc3..00000000 --- a/firmware/lib/region-init.c +++ /dev/null @@ -1,91 +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 "2misc.h" - -#include "sysincludes.h" -#include "gbb_access.h" -#include "load_kernel_fw.h" -#include "utility.h" -#include "vboot_api.h" -#include "vboot_struct.h" - -static VbError_t VbGbbReadData(struct vb2_context *ctx, - uint32_t offset, uint32_t size, void *buf) -{ - if (vb2ex_read_resource(ctx, VB2_RES_GBB, offset, buf, size)) - return VBERROR_INVALID_GBB; - return VBERROR_SUCCESS; -} - -VbError_t VbGbbReadHWID(struct vb2_context *ctx, char *hwid, uint32_t max_size) -{ - struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); - - if (!max_size) - return VBERROR_INVALID_PARAMETER; - *hwid = '\0'; - StrnAppend(hwid, "{INVALID}", max_size); - if (!ctx) - return VBERROR_INVALID_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; - } - - return VbGbbReadData(ctx, gbb->hwid_offset, - 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 VbGbbReadRootKey(struct vb2_context *ctx, VbPublicKey **keyp) -{ - struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); - - return VbGbbReadKey(ctx, gbb->rootkey_offset, keyp); -} - -VbError_t VbGbbReadRecoveryKey(struct vb2_context *ctx, VbPublicKey **keyp) -{ - struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); - - return VbGbbReadKey(ctx, gbb->recovery_key_offset, keyp); -} |