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

Unified Diff: src/platform/vboot_reference/utility/kernel_utility.cc

Issue 1752013: Vboot Reference: Make kernel signing utility more flexible. (Closed)
Patch Set: review fixes Created 10 years, 8 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
Index: src/platform/vboot_reference/utility/kernel_utility.cc
diff --git a/src/platform/vboot_reference/utility/kernel_utility.cc b/src/platform/vboot_reference/utility/kernel_utility.cc
index 9fedeb5fdd06240dbbf5a611a05b03158ffce511..89578910a8e35a8a61c1559ca83e92a808e39dba 100644
--- a/src/platform/vboot_reference/utility/kernel_utility.cc
+++ b/src/platform/vboot_reference/utility/kernel_utility.cc
@@ -35,9 +35,11 @@ KernelUtility::KernelUtility(): image_(NULL),
kernel_sign_algorithm_(-1),
kernel_key_version_(-1),
kernel_version_(-1),
+ cmd_line_(NULL),
is_generate_(false),
is_verify_(false),
- is_describe_(false){
+ is_describe_(false),
+ is_only_vblock_(false) {
// Populate kernel config options with defaults.
options_.version[0] = 1;
options_.version[1] = 0;
@@ -47,6 +49,7 @@ KernelUtility::KernelUtility(): image_(NULL),
}
KernelUtility::~KernelUtility() {
+ Free(cmd_line_);
RSAPublicKeyFree(firmware_key_pub_);
KernelImageFree(image_);
}
@@ -72,9 +75,11 @@ void KernelUtility::PrintUsage(void) {
"--in <infile>\t\tKernel Image to sign\n"
"--out <outfile>\t\tOutput file for verified boot Kernel image\n\n"
"Optional arguments for \"--generate\" include:\n"
+ "--config <file>\t\t\tPopulate contents of kernel config from a file\n"
"--config_version <version>\n"
"--kernel_load_addr <addr>\n"
- "--kernel_entry_addr <addr>\n\n"
+ "--kernel_entry_addr <addr>\n"
+ "--vblock\t\t\tJust output the verification block\n\n"
"<algoid> (for --*_sign_algorithm) is one of the following:\n";
for (int i = 0; i < kNumAlgorithms; i++) {
cerr << i << " for " << algo_strings[i] << "\n";
@@ -101,6 +106,8 @@ bool KernelUtility::ParseCmdLineOptions(int argc, char* argv[]) {
{"kernel_load_addr", 1, 0, 0},
{"kernel_entry_addr", 1, 0, 0},
{"describe", 0, 0, 0},
+ {"config", 1, 0, 0},
+ {"vblock", 0, 0, 0},
{NULL, 0, 0, 0}
};
while (1) {
@@ -186,6 +193,12 @@ bool KernelUtility::ParseCmdLineOptions(int argc, char* argv[]) {
case 15: // describe
is_describe_ = true;
break;
+ case 16: // config
+ config_file_ = optarg;
+ break;
+ case 17: // vblock
+ is_only_vblock_ = true;
+ break;
}
}
}
@@ -194,7 +207,7 @@ bool KernelUtility::ParseCmdLineOptions(int argc, char* argv[]) {
void KernelUtility::OutputSignedImage(void) {
if (image_) {
- if (!WriteKernelImage(out_file_.c_str(), image_)) {
+ if (!WriteKernelImage(out_file_.c_str(), image_, is_only_vblock_)) {
cerr << "Couldn't write verified boot kernel image to file "
<< out_file_ <<".\n";
}
@@ -211,6 +224,7 @@ void KernelUtility::DescribeSignedImage(void) {
}
bool KernelUtility::GenerateSignedImage(void) {
+ uint64_t len;
uint64_t kernel_key_pub_len;
image_ = KernelImageNew();
@@ -236,8 +250,16 @@ bool KernelUtility::GenerateSignedImage(void) {
image_->kernel_version = kernel_version_;
image_->options.version[0] = options_.version[0];
image_->options.version[1] = options_.version[1];
- // TODO(gauravsh): Add a command line option for this.
- Memset(image_->options.cmd_line, 0, sizeof(image_->options.cmd_line));
+ if (!config_file_.empty()) {
+ cmd_line_ = BufferFromFile(config_file_.c_str(), &len);
+ if (len >= sizeof(image_->options.cmd_line)) {
+ cerr << "Input kernel config file is too big!";
+ return false;
+ }
+ Memcpy(image_->options.cmd_line, cmd_line_, len);
+ } else {
+ Memset(image_->options.cmd_line, 0, sizeof(image_->options.cmd_line));
+ }
image_->options.kernel_load_addr = options_.kernel_load_addr;
image_->options.kernel_entry_addr = options_.kernel_entry_addr;
image_->kernel_data = BufferFromFile(in_file_.c_str(),

Powered by Google App Engine
This is Rietveld 408576698