Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Unified Diff: src/platform/vboot_reference/utils/kernel_image.c

Issue 874006: Add a command line string field to verified boot kernel config image. (Closed)
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/vboot_reference/utils/firmware_image.c ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/vboot_reference/utils/kernel_image.c
diff --git a/src/platform/vboot_reference/utils/kernel_image.c b/src/platform/vboot_reference/utils/kernel_image.c
index 8201137a4f32fb2c53c48c4bc38eb36bd7ef8b81..a1b943f83a556fecd489bdf24dca60eb24e582e9 100644
--- a/src/platform/vboot_reference/utils/kernel_image.c
+++ b/src/platform/vboot_reference/utils/kernel_image.c
@@ -132,6 +132,7 @@ KernelImage* ReadKernelImage(const char* input_file) {
/* Read the kernel config. */
StatefulMemcpy(&st, &image->kernel_version, FIELD_LEN(kernel_version));
StatefulMemcpy(&st, &image->options.version, FIELD_LEN(options.version));
+ StatefulMemcpy(&st, &image->options.cmd_line, FIELD_LEN(options.cmd_line));
StatefulMemcpy(&st, &image->options.kernel_len,
FIELD_LEN(options.kernel_len));
StatefulMemcpy(&st, &image->options.kernel_load_addr,
@@ -193,7 +194,8 @@ uint8_t* GetKernelHeaderBlob(const KernelImage* image) {
}
int GetKernelConfigLen(const KernelImage* image) {
- return (FIELD_LEN(kernel_version) + FIELD_LEN(options.version) +
+ return (FIELD_LEN(kernel_version) +
+ FIELD_LEN(options.version) + FIELD_LEN(options.cmd_line) +
FIELD_LEN(options.kernel_len) + FIELD_LEN(options.kernel_load_addr) +
FIELD_LEN(options.kernel_entry_addr));
}
@@ -208,6 +210,7 @@ uint8_t* GetKernelConfigBlob(const KernelImage* image) {
StatefulMemcpy_r(&st, &image->kernel_version, FIELD_LEN(kernel_version));
StatefulMemcpy_r(&st, image->options.version, FIELD_LEN(options.version));
+ StatefulMemcpy_r(&st, image->options.cmd_line, FIELD_LEN(options.cmd_line));
StatefulMemcpy_r(&st, &image->options.kernel_len,
FIELD_LEN(options.kernel_len));
StatefulMemcpy_r(&st, &image->options.kernel_load_addr,
@@ -314,11 +317,13 @@ void PrintKernelImage(const KernelImage* image) {
/* Print preamble. */
printf("Kernel Version = %d\n"
"Kernel Config Version = %d.%d\n"
+ "Kernel Config command line = %s\n"
"kernel Length = %" PRId64 "\n"
"Kernel Load Address = %" PRId64 "\n"
"Kernel Entry Address = %" PRId64 "\n\n",
image->kernel_version,
image->options.version[0], image->options.version[1],
+ image->options.cmd_line,
image->options.kernel_len,
image->options.kernel_load_addr,
image->options.kernel_entry_addr);
@@ -420,11 +425,7 @@ int VerifyKernelConfig(RSAPublicKey* kernel_sign_key,
int algorithm,
int* kernel_len) {
uint32_t len, config_len;
- config_len = (FIELD_LEN(kernel_version) +
- FIELD_LEN(options.version)+
- FIELD_LEN(options.kernel_len) +
- FIELD_LEN(options.kernel_load_addr) +
- FIELD_LEN(options.kernel_entry_addr));
+ config_len = GetKernelConfigLen(NULL);
if (!RSAVerifyBinary_f(NULL, kernel_sign_key, /* Key to use */
config_blob, /* Data to verify */
config_len, /* Length of data */
@@ -432,8 +433,9 @@ int VerifyKernelConfig(RSAPublicKey* kernel_sign_key,
algorithm))
return VERIFY_KERNEL_CONFIG_SIGNATURE_FAILED;
- Memcpy(&len, config_blob + (FIELD_LEN(kernel_version)+
- FIELD_LEN(options.version)),
+ Memcpy(&len,
+ config_blob + (FIELD_LEN(kernel_version) + FIELD_LEN(options.version) +
+ FIELD_LEN(options.cmd_line)),
sizeof(len));
*kernel_len = (int) len;
return 0;
@@ -506,11 +508,7 @@ int VerifyKernel(const uint8_t* firmware_key_blob,
}
/* Only continue if kernel data verification succeeds. */
kernel_ptr = (config_ptr +
- FIELD_LEN(kernel_version) +
- FIELD_LEN(options.version) +
- FIELD_LEN(options.kernel_len) +
- FIELD_LEN(options.kernel_entry_addr) +
- FIELD_LEN(options.kernel_load_addr) +
+ GetKernelConfigLen(NULL) + /* Skip config block/signature. */
kernel_signature_len);
if ((error_code = VerifyKernelData(kernel_sign_key, kernel_ptr, kernel_len,
@@ -587,8 +585,10 @@ int VerifyKernelImage(const RSAPublicKey* firmware_key,
DigestInit(&ctx, image->kernel_sign_algorithm);
DigestUpdate(&ctx, (uint8_t*) &image->kernel_version,
FIELD_LEN(kernel_version));
- DigestUpdate(&ctx, (uint8_t*) &image->options.version,
+ DigestUpdate(&ctx, (uint8_t*) image->options.version,
FIELD_LEN(options.version));
+ DigestUpdate(&ctx, (uint8_t*) image->options.cmd_line,
+ FIELD_LEN(options.cmd_line));
DigestUpdate(&ctx, (uint8_t*) &image->options.kernel_len,
FIELD_LEN(options.kernel_len));
DigestUpdate(&ctx, (uint8_t*) &image->options.kernel_load_addr,
« no previous file with comments | « src/platform/vboot_reference/utils/firmware_image.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698