| Index: src/platform/vboot_reference/vkernel/kernel_image.c
|
| diff --git a/src/platform/vboot_reference/vkernel/kernel_image.c b/src/platform/vboot_reference/vkernel/kernel_image.c
|
| index 8c8c09221113c57f4e7a6ada39b222635bc392ea..cc184673692bb2a61773a304474c50ccd9efca3c 100644
|
| --- a/src/platform/vboot_reference/vkernel/kernel_image.c
|
| +++ b/src/platform/vboot_reference/vkernel/kernel_image.c
|
| @@ -29,6 +29,7 @@ KernelImage* KernelImageNew(void) {
|
| if (image) {
|
| image->kernel_sign_key = NULL;
|
| image->kernel_key_signature = NULL;
|
| + Memset(image->options.cmd_line, 0, sizeof(image->options.cmd_line));
|
| image->config_signature = NULL;
|
| image->kernel_signature = NULL;
|
| image->kernel_data = NULL;
|
| @@ -298,8 +299,10 @@ uint8_t* GetKernelBlob(const KernelImage* image, uint64_t* blob_len) {
|
| }
|
|
|
| int WriteKernelImage(const char* input_file,
|
| - const KernelImage* image) {
|
| + const KernelImage* image,
|
| + int is_only_vblock) {
|
| int fd;
|
| + int success = 1;
|
| uint8_t* kernel_blob;
|
| uint64_t blob_len;
|
|
|
| @@ -315,17 +318,24 @@ int WriteKernelImage(const char* input_file,
|
| debug("Couldn't create kernel blob from KernelImage.\n");
|
| return 0;
|
| }
|
| - if (blob_len != write(fd, kernel_blob, blob_len)) {
|
| - debug("Couldn't write Kernel Image to file: %s\n",
|
| + if (!is_only_vblock) {
|
| + if (blob_len != write(fd, kernel_blob, blob_len)) {
|
| + debug("Couldn't write Kernel Image to file: %s\n",
|
| input_file);
|
| -
|
| - Free(kernel_blob);
|
| - close(fd);
|
| - return 0;
|
| + success = 0;
|
| + }
|
| + } else {
|
| + /* Exclude the kernel_data. */
|
| + int vblock_len = blob_len - image->options.kernel_len;
|
| + if (vblock_len != write(fd, kernel_blob, vblock_len)) {
|
| + debug("Couldn't write Kernel Image Verification block to file: %s\n",
|
| + input_file);
|
| + success = 0;
|
| + }
|
| }
|
| Free(kernel_blob);
|
| close(fd);
|
| - return 1;
|
| + return success;
|
| }
|
|
|
| void PrintKernelImage(const KernelImage* image) {
|
|
|