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

Side by Side Diff: src/platform/vboot_reference/vkernel/kernel_image.c

Issue 2353001: random cleanup (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: Created 10 years, 6 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
« no previous file with comments | « src/platform/vboot_reference/vfirmware/firmware_image.c ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 kernel image. 5 * Functions for generating and manipulating a verified boot kernel image.
6 * (Userland portion) 6 * (Userland portion)
7 */ 7 */
8 #include "kernel_image.h" 8 #include "kernel_image.h"
9 9
10 #include <fcntl.h> 10 #include <fcntl.h>
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 int is_subkey_out) { 326 int is_subkey_out) {
327 int fd; 327 int fd;
328 int success = 1; 328 int success = 1;
329 uint8_t* kernel_blob = NULL; 329 uint8_t* kernel_blob = NULL;
330 uint8_t* subkey_out_buf = NULL; 330 uint8_t* subkey_out_buf = NULL;
331 uint8_t* subkey_header = NULL; 331 uint8_t* subkey_header = NULL;
332 uint64_t blob_len; 332 uint64_t blob_len;
333 333
334 if (!image) 334 if (!image)
335 return 0; 335 return 0;
336 if (-1 == (fd = creat(output_file, S_IRWXU))) { 336 if (-1 == (fd = creat(output_file, 0666))) {
337 debug("Couldn't open file for writing kernel image: %s\n", 337 debug("Couldn't open file for writing kernel image: %s\n",
338 output_file); 338 output_file);
339 return 0; 339 return 0;
340 } 340 }
341 if (is_subkey_out) { 341 if (is_subkey_out) {
342 blob_len = GetKernelHeaderLen(image) + 342 blob_len = GetKernelHeaderLen(image) +
343 siglen_map[image->firmware_sign_algorithm]; 343 siglen_map[image->firmware_sign_algorithm];
344 subkey_out_buf = (uint8_t*) Malloc(blob_len); 344 subkey_out_buf = (uint8_t*) Malloc(blob_len);
345 subkey_header = GetKernelHeaderBlob(image); 345 subkey_header = GetKernelHeaderBlob(image);
346 Memcpy(subkey_out_buf, subkey_header, GetKernelHeaderLen(image)); 346 Memcpy(subkey_out_buf, subkey_header, GetKernelHeaderLen(image));
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 uint64_t i; 662 uint64_t i;
663 663
664 // Read the input files. 664 // Read the input files.
665 kernel_buf = BufferFromFile(kernel_file, &kernel_size); 665 kernel_buf = BufferFromFile(kernel_file, &kernel_size);
666 if (!kernel_buf) 666 if (!kernel_buf)
667 goto done0; 667 goto done0;
668 668
669 config_buf = BufferFromFile(config_file, &config_size); 669 config_buf = BufferFromFile(config_file, &config_size);
670 if (!config_buf) 670 if (!config_buf)
671 goto done1; 671 goto done1;
672 if (config_size < CROS_CONFIG_SIZE) // need room for trailing '\0' 672 if (config_size >= CROS_CONFIG_SIZE) { // need room for trailing '\0'
673 error("config file %s is too large (>= %d bytes)\n",
674 config_file, CROS_CONFIG_SIZE);
673 goto done1; 675 goto done1;
676 }
674 677
675 // Replace any newlines with spaces in the config file. 678 // Replace any newlines with spaces in the config file.
676 for (i=0; i < config_size; i++) 679 for (i=0; i < config_size; i++)
677 if (config_buf[i] == '\n') 680 if (config_buf[i] == '\n')
678 config_buf[i] = ' '; 681 config_buf[i] = ' ';
679 682
680 bootloader_buf = BufferFromFile(bootloader_file, &bootloader_size); 683 bootloader_buf = BufferFromFile(bootloader_file, &bootloader_size);
681 if (!bootloader_buf) 684 if (!bootloader_buf)
682 goto done2; 685 goto done2;
683 686
684 // The first part of vmlinuz is a header, followed by a real-mode boot stub. 687 // The first part of vmlinuz is a header, followed by a real-mode boot stub.
685 // We only want the 32-bit part. 688 // We only want the 32-bit part.
686 if (kernel_size) { 689 if (kernel_size) {
687 lh = (struct linux_kernel_header *)kernel_buf; 690 lh = (struct linux_kernel_header *)kernel_buf;
688 kernel32_start = (lh->setup_sects+1) << 9; 691 kernel32_start = (lh->setup_sects+1) << 9;
689 kernel32_size = kernel_size - kernel32_start; 692 kernel32_size = kernel_size - kernel32_start;
690 } 693 }
691 694
692 // Allocate and zero the blob we need. 695 // Allocate and zero the blob we need.
693 blob_size = roundup(kernel32_size, CROS_ALIGN) + 696 blob_size = roundup(kernel32_size, CROS_ALIGN) +
694 CROS_CONFIG_SIZE + 697 CROS_CONFIG_SIZE +
695 CROS_PARAMS_SIZE + 698 CROS_PARAMS_SIZE +
696 roundup(bootloader_size, CROS_ALIGN); 699 roundup(bootloader_size, CROS_ALIGN);
697 blob = (uint8_t *)Malloc(blob_size); 700 blob = (uint8_t *)Malloc(blob_size);
698 if (!blob) 701 if (!blob) {
702 error("Couldn't allocate %ld bytes.\n", blob_size);
699 goto done3; 703 goto done3;
704 }
700 Memset(blob, 0, blob_size); 705 Memset(blob, 0, blob_size);
701 now = 0; 706 now = 0;
702 707
703 // Copy the 32-bit kernel. 708 // Copy the 32-bit kernel.
704 if (kernel32_size) 709 if (kernel32_size)
705 Memcpy(blob + now, kernel_buf + kernel32_start, kernel32_size); 710 Memcpy(blob + now, kernel_buf + kernel32_start, kernel32_size);
706 now += roundup(now + kernel32_size, CROS_ALIGN); 711 now += roundup(now + kernel32_size, CROS_ALIGN);
707 712
708 // Find the load address of the commandline. We'll need it later. 713 // Find the load address of the commandline. We'll need it later.
709 cmdline_addr = CROS_32BIT_ENTRY_ADDR + now 714 cmdline_addr = CROS_32BIT_ENTRY_ADDR + now
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 // Clean up and return the blob. 751 // Clean up and return the blob.
747 done3: 752 done3:
748 Free(bootloader_buf); 753 Free(bootloader_buf);
749 done2: 754 done2:
750 Free(config_buf); 755 Free(config_buf);
751 done1: 756 done1:
752 Free(kernel_buf); 757 Free(kernel_buf);
753 done0: 758 done0:
754 return blob; 759 return blob;
755 } 760 }
OLDNEW
« no previous file with comments | « src/platform/vboot_reference/vfirmware/firmware_image.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698