diff options
author | Bill Richardson <wfrichar@chromium.org> | 2014-12-04 19:06:35 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-01-22 22:45:53 +0000 |
commit | a77541f94f731f5f7755264e9b49b7826aa48dfe (patch) | |
tree | e37da28da60783037d6a7cba6799d8ceeb3f33c7 /futility | |
parent | 4dad690e082af98de8311566c197efbbfa1bc956 (diff) | |
download | vboot-a77541f94f731f5f7755264e9b49b7826aa48dfe.tar.gz |
futility: extract verify_kernel command to an external test
The verify_kernel command is used only in a host-side test. It
doesn't need to be built into futility. This makes it a separate
executable used just for that test.
BUG=chromium:231547
BRANCH=none
TEST=make runtests
Note that the load_kernel_tests.sh still passes, using the
external verify_kernel executable.
Change-Id: I309d2561d65af7eb4f3708e9bc024852238deeec
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/235480
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'futility')
-rw-r--r-- | futility/cmd_verify_kernel.c | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/futility/cmd_verify_kernel.c b/futility/cmd_verify_kernel.c deleted file mode 100644 index ffdf7d0f..00000000 --- a/futility/cmd_verify_kernel.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (c) 2014 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. - * - * Routines for verifying a kernel or disk image - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "host_common.h" -#include "util_misc.h" -#include "vboot_common.h" -#include "vboot_api.h" -#include "vboot_kernel.h" -#include "futility.h" - -static uint8_t *diskbuf; - -static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; -static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data; -static VbNvContext nvc; - -static LoadKernelParams params; -static VbCommonParams cparams; - -VbError_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start, - uint64_t lba_count, void *buffer) -{ - if (handle != (VbExDiskHandle_t)1) - return VBERROR_UNKNOWN; - if (lba_start >= params.streaming_lba_count) - return VBERROR_UNKNOWN; - if (lba_start + lba_count > params.streaming_lba_count) - return VBERROR_UNKNOWN; - - memcpy(buffer, diskbuf + lba_start * 512, lba_count * 512); - return VBERROR_SUCCESS; -} - -VbError_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start, - uint64_t lba_count, const void *buffer) -{ - if (handle != (VbExDiskHandle_t)1) - return VBERROR_UNKNOWN; - if (lba_start >= params.streaming_lba_count) - return VBERROR_UNKNOWN; - if (lba_start + lba_count > params.streaming_lba_count) - return VBERROR_UNKNOWN; - - memcpy(diskbuf + lba_start * 512, buffer, lba_count * 512); - return VBERROR_SUCCESS; -} - -static void print_help(const char *progname) -{ - printf("\nUsage: " MYNAME " %s <disk_image> <kernel.vbpubk>\n\n", - progname); -} - -static int do_verify_kernel(int argc, char *argv[]) -{ - VbPublicKey *kernkey; - uint64_t disk_bytes = 0; - int rv; - - if (argc < 3) { - print_help(argv[0]); - return 1; - } - - /* Load disk file */ - /* TODO: is it better to mmap() in the long run? */ - diskbuf = ReadFile(argv[1], &disk_bytes); - if (!diskbuf) { - fprintf(stderr, "Can't read disk file %s\n", argv[1]); - return 1; - } - - /* Read public key */ - kernkey = PublicKeyRead(argv[2]); - if (!kernkey) { - fprintf(stderr, "Can't read key file %s\n", argv[2]); - return 1; - } - - /* Set up shared data blob */ - VbSharedDataInit(shared, sizeof(shared_data)); - VbSharedDataSetKernelKey(shared, kernkey); - /* TODO: optional TPM current kernel version */ - - /* Set up params */ - params.shared_data_blob = shared_data; - params.shared_data_size = sizeof(shared_data); - params.disk_handle = (VbExDiskHandle_t)1; - params.bytes_per_lba = 512; - params.streaming_lba_count = disk_bytes / 512; - params.gpt_lba_count = params.streaming_lba_count; - - params.kernel_buffer_size = 16 * 1024 * 1024; - params.kernel_buffer = malloc(params.kernel_buffer_size); - if (!params.kernel_buffer) { - fprintf(stderr, "Can't allocate kernel buffer\n"); - return 1; - } - - /* GBB and cparams only needed by LoadKernel() in recovery mode */ - params.gbb_data = NULL; - params.gbb_size = 0; - - /* TODO(chromium:441893): support dev-mode flag and external gpt flag */ - params.boot_flags = 0; - - /* - * LoadKernel() cares only about VBNV_DEV_BOOT_SIGNED_ONLY, and only in - * dev mode. So just use defaults. - */ - VbNvSetup(&nvc); - params.nv_context = &nvc; - - /* Try loading kernel */ - rv = LoadKernel(¶ms, &cparams); - if (rv != VBERROR_SUCCESS) { - fprintf(stderr, "LoadKernel() failed with code %d\n", rv); - return 1; - } - - printf("Found a good kernel.\n"); - printf("Partition number: %d\n", (int)params.partition_number); - printf("Bootloader address: 0x%" PRIx64 "\n", - params.bootloader_address); - - /* TODO: print other things (partition GUID, nv_context, shared_data) */ - - printf("Yaay!\n"); - return 0; -} - -DECLARE_FUTIL_COMMAND(verify_kernel, do_verify_kernel, - "Verifies a kernel / disk image", - print_help); |