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

Side by Side Diff: src/platform/vboot_reference/utils/firmware_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 unified diff | Download patch
OLDNEW
1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be 2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. 3 * found in the LICENSE file.
4 * 4 *
5 * Functions for generating and manipulating a verified boot firmware image. 5 * Functions for generating and manipulating a verified boot firmware image.
6 */ 6 */
7 7
8 #include "firmware_image.h" 8 #include "firmware_image.h"
9 9
10 #include <fcntl.h> 10 #include <fcntl.h>
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 if (image->firmware_sign_algorithm >= kNumAlgorithms) { 80 if (image->firmware_sign_algorithm >= kNumAlgorithms) {
81 Free(firmware_buf); 81 Free(firmware_buf);
82 return NULL; 82 return NULL;
83 } 83 }
84 84
85 /* Compute size of pre-processed RSA public key and signature. */ 85 /* Compute size of pre-processed RSA public key and signature. */
86 firmware_sign_key_len = RSAProcessedKeySize(image->firmware_sign_algorithm); 86 firmware_sign_key_len = RSAProcessedKeySize(image->firmware_sign_algorithm);
87 signature_len = siglen_map[image->firmware_sign_algorithm]; 87 signature_len = siglen_map[image->firmware_sign_algorithm];
88 88
89 /* Check whether the header length is correct. */ 89 /* Check whether the header length is correct. */
90 header_len = (FIELD_LEN(header_len) + 90 header_len = GetFirmwareHeaderLen(image);
91 FIELD_LEN(firmware_sign_algorithm) +
92 firmware_sign_key_len +
93 FIELD_LEN(firmware_key_version) +
94 FIELD_LEN(header_checksum));
95 if (header_len != image->header_len) { 91 if (header_len != image->header_len) {
96 fprintf(stderr, "Header length mismatch. Got: %d Expected: %d\n", 92 fprintf(stderr, "Header length mismatch. Got: %d Expected: %d\n",
97 image->header_len, header_len); 93 image->header_len, header_len);
98 Free(firmware_buf); 94 Free(firmware_buf);
99 return NULL; 95 return NULL;
100 } 96 }
101 97
102 /* Read pre-processed public half of the sign key. */ 98 /* Read pre-processed public half of the sign key. */
103 image->firmware_sign_key = (uint8_t*) Malloc(firmware_sign_key_len); 99 image->firmware_sign_key = (uint8_t*) Malloc(firmware_sign_key_len);
104 StatefulMemcpy(&st, image->firmware_sign_key, firmware_sign_key_len); 100 StatefulMemcpy(&st, image->firmware_sign_key, firmware_sign_key_len);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 firmware_blob = (uint8_t*) Malloc(*blob_len); 204 firmware_blob = (uint8_t*) Malloc(*blob_len);
209 st.remaining_len = *blob_len; 205 st.remaining_len = *blob_len;
210 st.remaining_buf = firmware_blob; 206 st.remaining_buf = firmware_blob;
211 207
212 header_blob = GetFirmwareHeaderBlob(image); 208 header_blob = GetFirmwareHeaderBlob(image);
213 preamble_blob = GetFirmwarePreambleBlob(image); 209 preamble_blob = GetFirmwarePreambleBlob(image);
214 210
215 StatefulMemcpy_r(&st, image->magic, FIELD_LEN(magic)); 211 StatefulMemcpy_r(&st, image->magic, FIELD_LEN(magic));
216 StatefulMemcpy_r(&st, header_blob, GetFirmwareHeaderLen(image)); 212 StatefulMemcpy_r(&st, header_blob, GetFirmwareHeaderLen(image));
217 StatefulMemcpy_r(&st, image->firmware_key_signature, 213 StatefulMemcpy_r(&st, image->firmware_key_signature,
218 FIELD_LEN(firmware_key_signature)); 214 FIELD_LEN(firmware_key_signature));
219 StatefulMemcpy_r(&st, preamble_blob, GetFirmwarePreambleLen(image)); 215 StatefulMemcpy_r(&st, preamble_blob, GetFirmwarePreambleLen(image));
220 StatefulMemcpy_r(&st, image->preamble_signature, firmware_signature_len); 216 StatefulMemcpy_r(&st, image->preamble_signature, firmware_signature_len);
221 StatefulMemcpy_r(&st, image->firmware_signature, firmware_signature_len); 217 StatefulMemcpy_r(&st, image->firmware_signature, firmware_signature_len);
222 StatefulMemcpy_r(&st, image->firmware_data, image->firmware_len); 218 StatefulMemcpy_r(&st, image->firmware_data, image->firmware_len);
223 219
224 Free(preamble_blob); 220 Free(preamble_blob);
225 Free(header_blob); 221 Free(header_blob);
226 222
227 if (st.remaining_len != 0) { /* Underrun or Overrun. */ 223 if (st.remaining_len != 0) { /* Underrun or Overrun. */
228 Free(firmware_blob); 224 Free(firmware_blob);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 preamble_ptr = (header_ptr + header_len + 423 preamble_ptr = (header_ptr + header_len +
428 FIELD_LEN(firmware_key_signature)); 424 FIELD_LEN(firmware_key_signature));
429 if ((error_code = VerifyFirmwarePreamble(firmware_sign_key, preamble_ptr, 425 if ((error_code = VerifyFirmwarePreamble(firmware_sign_key, preamble_ptr,
430 algorithm, 426 algorithm,
431 &firmware_len))) { 427 &firmware_len))) {
432 RSAPublicKeyFree(firmware_sign_key); 428 RSAPublicKeyFree(firmware_sign_key);
433 return error_code; /* AKA jump to recovery. */ 429 return error_code; /* AKA jump to recovery. */
434 } 430 }
435 /* Only continue if firmware data verification succeeds. */ 431 /* Only continue if firmware data verification succeeds. */
436 firmware_ptr = (preamble_ptr + 432 firmware_ptr = (preamble_ptr +
437 FIELD_LEN(firmware_version) + 433 GetFirmwarePreambleLen(NULL) +
438 FIELD_LEN(firmware_len) +
439 FIELD_LEN(preamble) +
440 signature_len); 434 signature_len);
441 435
442 if ((error_code = VerifyFirmwareData(firmware_sign_key, firmware_ptr, 436 if ((error_code = VerifyFirmwareData(firmware_sign_key, firmware_ptr,
443 firmware_len, 437 firmware_len,
444 algorithm))) { 438 algorithm))) {
445 RSAPublicKeyFree(firmware_sign_key); 439 RSAPublicKeyFree(firmware_sign_key);
446 return error_code; /* AKA jump to recovery. */ 440 return error_code; /* AKA jump to recovery. */
447 } 441 }
448 442
449 RSAPublicKeyFree(firmware_sign_key); 443 RSAPublicKeyFree(firmware_sign_key);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 if (!(firmware_signature = SignatureBuf(image->firmware_data, 578 if (!(firmware_signature = SignatureBuf(image->firmware_data,
585 image->firmware_len, 579 image->firmware_len,
586 signing_key_file, 580 signing_key_file,
587 image->firmware_sign_algorithm))) 581 image->firmware_sign_algorithm)))
588 return 0; 582 return 0;
589 image->firmware_signature = (uint8_t*) Malloc(signature_len); 583 image->firmware_signature = (uint8_t*) Malloc(signature_len);
590 Memcpy(image->firmware_signature, firmware_signature, signature_len); 584 Memcpy(image->firmware_signature, firmware_signature, signature_len);
591 Free(firmware_signature); 585 Free(firmware_signature);
592 return 1; 586 return 1;
593 } 587 }
OLDNEW
« no previous file with comments | « src/platform/vboot_reference/tests/kernel_image_tests.c ('k') | src/platform/vboot_reference/utils/kernel_image.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698