summaryrefslogtreecommitdiff
path: root/futility/cmd_vbutil_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'futility/cmd_vbutil_kernel.c')
-rw-r--r--futility/cmd_vbutil_kernel.c89
1 files changed, 42 insertions, 47 deletions
diff --git a/futility/cmd_vbutil_kernel.c b/futility/cmd_vbutil_kernel.c
index ebb4510e..740c3af4 100644
--- a/futility/cmd_vbutil_kernel.c
+++ b/futility/cmd_vbutil_kernel.c
@@ -28,9 +28,9 @@
#include "vboot_common.h"
/* Global opts */
-static int opt_debug = 0;
-static int opt_verbose = 0;
-static int opt_vblockonly = 0;
+static int opt_debug;
+static int opt_verbose;
+static int opt_vblockonly;
static uint64_t opt_pad = 65536;
/* Command line options */
@@ -85,9 +85,8 @@ static const struct option long_opts[] = {
static const char usage[] =
- "This program creates, signs, and verifies the kernel blob\n"
"\n"
- "Usage: %s --pack <file> [PARAMETERS]\n"
+ "Usage: " MYNAME " %s --pack <file> [PARAMETERS]\n"
"\n"
" Required parameters:\n"
" --keyblock <file> Key block in .keyblock format\n"
@@ -104,7 +103,7 @@ static const char usage[] =
" --pad <number> Verification padding size in bytes\n"
" --vblockonly Emit just the verification blob\n"
"\nOR\n\n"
- "Usage: %s --repack <file> [PARAMETERS]\n"
+ "Usage: " MYNAME " %s --repack <file> [PARAMETERS]\n"
"\n"
" Required parameters:\n"
" --signprivate <file> Private key to sign kernel data,\n"
@@ -120,7 +119,7 @@ static const char usage[] =
" --pad <number> Verification blob size in bytes\n"
" --vblockonly Emit just the verification blob\n"
"\nOR\n\n"
- "Usage: %s --verify <file> [PARAMETERS]\n"
+ "Usage: " MYNAME " %s --verify <file> [PARAMETERS]\n"
"\n"
" Optional:\n"
" --signpubkey <file>"
@@ -136,10 +135,9 @@ static const char usage[] =
/* Print help and return error */
-static int PrintHelp(char *progname)
+static void print_help(const char *progname)
{
- fprintf(stderr, usage, progname, progname, progname);
- return 1;
+ printf(usage, progname, progname, progname);
}
static void Debug(const char *format, ...)
@@ -165,7 +163,7 @@ static void Fatal(const char *format, ...)
}
/* Return an explanation when fread() fails. */
-static const char *error_fread(FILE * fp)
+static const char *error_fread(FILE *fp)
{
const char *retval = "beats me why";
if (feof(fp))
@@ -238,7 +236,7 @@ static VbKernelPreambleHeader *g_preamble;
* Return the buffer contaning the line on success (and set the line length
* using the passed in parameter), or NULL in case something goes wrong.
*/
-static uint8_t *ReadConfigFile(const char *config_file, uint64_t * config_size)
+static uint8_t *sReadConfigFile(const char *config_file, uint64_t *config_size)
{
uint8_t *config_buf;
int ii;
@@ -252,16 +250,15 @@ static uint8_t *ReadConfigFile(const char *config_file, uint64_t * config_size)
}
/* Replace newlines with spaces */
- for (ii = 0; ii < *config_size; ii++) {
- if ('\n' == config_buf[ii]) {
+ for (ii = 0; ii < *config_size; ii++)
+ if ('\n' == config_buf[ii])
config_buf[ii] = ' ';
- }
- }
+
return config_buf;
}
/* Offset of kernel command line string from start of packed kernel blob */
-static uint64_t CmdLineOffset(VbKernelPreambleHeader * preamble)
+static uint64_t CmdLineOffset(VbKernelPreambleHeader *preamble)
{
return preamble->bootloader_address - preamble->body_load_address -
CROS_CONFIG_SIZE - CROS_PARAMS_SIZE;
@@ -355,7 +352,7 @@ static int ImportVmlinuzFile(const char *vmlinuz_file, arch_t arch,
/* This returns just the kernel blob, with the verification blob separated
* and copied to new memory in g_keyblock and g_preamble. */
static uint8_t *ReadOldBlobFromFileOrDie(const char *filename,
- uint64_t * size_ptr)
+ uint64_t *size_ptr)
{
FILE *fp = NULL;
struct stat statbuf;
@@ -371,9 +368,8 @@ static uint8_t *ReadOldBlobFromFileOrDie(const char *filename,
Fatal("Unable to stat %s: %s\n", filename, strerror(errno));
if (S_ISBLK(statbuf.st_mode)) {
- int fd;
-
- if ((fd = open(filename, O_RDONLY)) >= 0) {
+ int fd = open(filename, O_RDONLY);
+ if (fd >= 0) {
ioctl(fd, BLKGETSIZE64, &file_size);
close(fd);
}
@@ -460,7 +456,7 @@ static uint8_t *ReadOldBlobFromFileOrDie(const char *filename,
/* Split a kernel blob into separate g_kernel, g_param, g_config, and
* g_bootloader parts. */
-static void UnpackKernelBlob(uint8_t * kernel_blob_data,
+static void UnpackKernelBlob(uint8_t *kernel_blob_data,
uint64_t kernel_blob_size)
{
@@ -498,8 +494,8 @@ static void UnpackKernelBlob(uint8_t * kernel_blob_data,
/****************************************************************************/
-static uint8_t *CreateKernelBlob(uint64_t kernel_body_load_address,
- arch_t arch, uint64_t * size_ptr)
+static uint8_t *CreateKernBlob(uint64_t kernel_body_load_address,
+ arch_t arch, uint64_t *size_ptr)
{
uint8_t *kern_blob;
uint64_t kern_blob_size;
@@ -525,9 +521,8 @@ static uint8_t *CreateKernelBlob(uint64_t kernel_body_load_address,
now += CROS_CONFIG_SIZE;
Debug("params goes at kern_blob+0x%" PRIx64 "\n", now);
- if (g_param_size) {
+ if (g_param_size)
Memcpy(kern_blob + now, g_param_data, g_param_size);
- }
now += CROS_PARAMS_SIZE;
Debug("bootloader goes at kern_blob+0x%" PRIx64 "\n", now);
@@ -547,10 +542,11 @@ static uint8_t *CreateKernelBlob(uint64_t kernel_body_load_address,
}
static int Pack(const char *outfile,
- uint8_t * kernel_blob,
+ uint8_t *kernel_blob,
uint64_t kernel_size,
int version,
- uint64_t kernel_body_load_address, VbPrivateKey * signpriv_key)
+ uint64_t kernel_body_load_address,
+ VbPrivateKey *signpriv_key)
{
VbSignature *body_sig;
FILE *f;
@@ -611,10 +607,11 @@ static int Pack(const char *outfile,
return 0;
}
-static int Verify(uint8_t * kernel_blob,
+static int Verify(uint8_t *kernel_blob,
uint64_t kernel_size,
- VbPublicKey * signpub_key,
- const char *keyblock_outfile, uint64_t min_version)
+ VbPublicKey *signpub_key,
+ const char *keyblock_outfile,
+ uint64_t min_version)
{
VbPublicKey *data_key;
RSAPublicKey *rsa;
@@ -737,12 +734,6 @@ static int do_vbutil_kernel(int argc, char *argv[])
uint8_t *kernel_blob = NULL;
uint64_t kernel_size = 0;
- char *progname = strrchr(argv[0], '/');
- if (progname)
- progname++;
- else
- progname = argv[0];
-
while (((i = getopt_long(argc, argv, ":", long_opts, NULL)) != -1) &&
!parse_error) {
switch (i) {
@@ -855,8 +846,10 @@ static int do_vbutil_kernel(int argc, char *argv[])
}
}
- if (parse_error)
- return PrintHelp(progname);
+ if (parse_error) {
+ print_help(argv[0]);
+ return 1;
+ }
switch (mode) {
case OPT_MODE_PACK:
@@ -882,7 +875,7 @@ static int do_vbutil_kernel(int argc, char *argv[])
if (config_file) {
Debug("Reading %s\n", config_file);
g_config_data =
- ReadConfigFile(config_file, &g_config_size);
+ sReadConfigFile(config_file, &g_config_size);
if (!g_config_data)
Fatal("Error reading config file.\n");
}
@@ -904,8 +897,8 @@ static int do_vbutil_kernel(int argc, char *argv[])
/* Do it */
- kernel_blob = CreateKernelBlob(kernel_body_load_address, arch,
- &kernel_size);
+ kernel_blob = CreateKernBlob(kernel_body_load_address, arch,
+ &kernel_size);
return Pack(filename, kernel_blob, kernel_size,
version, kernel_body_load_address, signpriv_key);
@@ -949,7 +942,7 @@ static int do_vbutil_kernel(int argc, char *argv[])
free(g_config_data);
Debug("Reading %s\n", config_file);
g_config_data =
- ReadConfigFile(config_file, &g_config_size);
+ sReadConfigFile(config_file, &g_config_size);
if (!g_config_data)
Fatal("Error reading config file.\n");
}
@@ -965,8 +958,8 @@ static int do_vbutil_kernel(int argc, char *argv[])
/* Put it back together */
- kernel_blob = CreateKernelBlob(kernel_body_load_address, arch,
- &kernel_size);
+ kernel_blob = CreateKernBlob(kernel_body_load_address, arch,
+ &kernel_size);
return Pack(filename, kernel_blob, kernel_size,
version, kernel_body_load_address, signpriv_key);
@@ -991,8 +984,10 @@ static int do_vbutil_kernel(int argc, char *argv[])
fprintf(stderr,
"You must specify a mode: --pack, --repack or --verify\n");
- return PrintHelp(progname);
+ print_help(argv[0]);
+ return 1;
}
DECLARE_FUTIL_COMMAND(vbutil_kernel, do_vbutil_kernel,
- "Verified boot kernel utility");
+ "Creates, signs, and verifies the kernel blob",
+ print_help);