OLD | NEW |
1 /* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2011 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 * Common functions between firmware and kernel verified boot. | 5 * Common functions between firmware and kernel verified boot. |
6 * (Firmware portion) | 6 * (Firmware portion) |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "vboot_common.h" | 10 #include "vboot_common.h" |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 VBDEBUG(("Kernel body signature off end of preamble\n")); | 374 VBDEBUG(("Kernel body signature off end of preamble\n")); |
375 return VBOOT_PREAMBLE_INVALID; | 375 return VBOOT_PREAMBLE_INVALID; |
376 } | 376 } |
377 | 377 |
378 /* Success */ | 378 /* Success */ |
379 return VBOOT_SUCCESS; | 379 return VBOOT_SUCCESS; |
380 } | 380 } |
381 | 381 |
382 | 382 |
383 int VbSharedDataInit(VbSharedDataHeader* header, uint64_t size) { | 383 int VbSharedDataInit(VbSharedDataHeader* header, uint64_t size) { |
| 384 |
| 385 VBDEBUG(("VbSharedDataInit, %d bytes, header %d bytes\n", (int)size, |
| 386 sizeof(VbSharedDataHeader))); |
| 387 |
384 if (size < sizeof(VbSharedDataHeader)) { | 388 if (size < sizeof(VbSharedDataHeader)) { |
385 VBDEBUG(("Not enough data for header.\n")); | 389 VBDEBUG(("Not enough data for header.\n")); |
386 return VBOOT_SHARED_DATA_INVALID; | 390 return VBOOT_SHARED_DATA_INVALID; |
387 } | 391 } |
388 if (size < VB_SHARED_DATA_MIN_SIZE) { | 392 if (size < VB_SHARED_DATA_MIN_SIZE) { |
389 VBDEBUG(("Shared data buffer too small.\n")); | 393 VBDEBUG(("Shared data buffer too small.\n")); |
390 return VBOOT_SHARED_DATA_INVALID; | 394 return VBOOT_SHARED_DATA_INVALID; |
391 } | 395 } |
392 | 396 |
393 if (!header) | 397 if (!header) |
394 return VBOOT_SHARED_DATA_INVALID; | 398 return VBOOT_SHARED_DATA_INVALID; |
395 | 399 |
396 /* Zero the header */ | 400 /* Zero the header */ |
397 Memset(header, 0, sizeof(VbSharedDataHeader)); | 401 Memset(header, 0, sizeof(VbSharedDataHeader)); |
398 | 402 |
399 /* Initialize fields */ | 403 /* Initialize fields */ |
| 404 header->magic = VB_SHARED_DATA_MAGIC; |
400 header->struct_version = VB_SHARED_DATA_VERSION; | 405 header->struct_version = VB_SHARED_DATA_VERSION; |
401 header->struct_size = sizeof(VbSharedDataHeader); | 406 header->struct_size = sizeof(VbSharedDataHeader); |
402 header->data_size = size; | 407 header->data_size = size; |
403 header->data_used = sizeof(VbSharedDataHeader); | 408 header->data_used = sizeof(VbSharedDataHeader); |
| 409 header->firmware_index = 0xFF; |
404 | 410 |
405 /* Success */ | 411 /* Success */ |
406 return VBOOT_SUCCESS; | 412 return VBOOT_SUCCESS; |
407 } | 413 } |
408 | 414 |
409 | 415 |
410 uint64_t VbSharedDataReserve(VbSharedDataHeader* header, uint64_t size) { | 416 uint64_t VbSharedDataReserve(VbSharedDataHeader* header, uint64_t size) { |
411 uint64_t offs = header->data_used; | 417 uint64_t offs = header->data_used; |
412 | 418 |
| 419 VBDEBUG(("VbSharedDataReserve %d bytes at %d\n", (int)size, (int)offs)); |
| 420 |
413 if (!header || size > header->data_size - header->data_used) { | 421 if (!header || size > header->data_size - header->data_used) { |
414 VBDEBUG(("VbSharedData buffer out of space.\n")); | 422 VBDEBUG(("VbSharedData buffer out of space.\n")); |
415 return 0; /* Not initialized, or not enough space left. */ | 423 return 0; /* Not initialized, or not enough space left. */ |
416 } | 424 } |
417 header->data_used += size; | 425 header->data_used += size; |
418 return offs; | 426 return offs; |
419 } | 427 } |
420 | 428 |
421 | 429 |
422 int VbSharedDataSetKernelKey(VbSharedDataHeader* header, | 430 int VbSharedDataSetKernelKey(VbSharedDataHeader* header, |
(...skipping 12 matching lines...) Expand all Loading... |
435 return VBOOT_SHARED_DATA_INVALID; | 443 return VBOOT_SHARED_DATA_INVALID; |
436 header->kernel_subkey_data_size = src->key_size; | 444 header->kernel_subkey_data_size = src->key_size; |
437 } | 445 } |
438 | 446 |
439 /* Copy the kernel sign key blob into the destination buffer */ | 447 /* Copy the kernel sign key blob into the destination buffer */ |
440 PublicKeyInit(kdest, (uint8_t*)header + header->kernel_subkey_data_offset, | 448 PublicKeyInit(kdest, (uint8_t*)header + header->kernel_subkey_data_offset, |
441 header->kernel_subkey_data_size); | 449 header->kernel_subkey_data_size); |
442 | 450 |
443 return PublicKeyCopy(kdest, src); | 451 return PublicKeyCopy(kdest, src); |
444 } | 452 } |
OLD | NEW |