xref: /aosp_15_r20/external/vboot_reference/utility/load_kernel_test.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2011 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  *
5*8617a60dSAndroid Build Coastguard Worker  * Routines for verifying a file's signature. Useful in testing the core
6*8617a60dSAndroid Build Coastguard Worker  * RSA verification implementation.
7*8617a60dSAndroid Build Coastguard Worker  */
8*8617a60dSAndroid Build Coastguard Worker 
9*8617a60dSAndroid Build Coastguard Worker #include <stdio.h>
10*8617a60dSAndroid Build Coastguard Worker #include <sys/types.h>
11*8617a60dSAndroid Build Coastguard Worker #include <unistd.h>
12*8617a60dSAndroid Build Coastguard Worker 
13*8617a60dSAndroid Build Coastguard Worker #include "2api.h"
14*8617a60dSAndroid Build Coastguard Worker #include "2common.h"
15*8617a60dSAndroid Build Coastguard Worker #include "2misc.h"
16*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h"
17*8617a60dSAndroid Build Coastguard Worker #include "host_common.h"
18*8617a60dSAndroid Build Coastguard Worker 
19*8617a60dSAndroid Build Coastguard Worker #define LBA_BYTES 512
20*8617a60dSAndroid Build Coastguard Worker #define KERNEL_BUFFER_SIZE 0xA00000
21*8617a60dSAndroid Build Coastguard Worker 
22*8617a60dSAndroid Build Coastguard Worker static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE];
23*8617a60dSAndroid Build Coastguard Worker static struct vb2_context *ctx;
24*8617a60dSAndroid Build Coastguard Worker static struct vb2_shared_data *sd;
25*8617a60dSAndroid Build Coastguard Worker 
26*8617a60dSAndroid Build Coastguard Worker /* Global variables for stub functions */
27*8617a60dSAndroid Build Coastguard Worker static struct vb2_kernel_params lkp;
28*8617a60dSAndroid Build Coastguard Worker static struct vb2_disk_info disk_info;
29*8617a60dSAndroid Build Coastguard Worker static FILE *image_file = NULL;
30*8617a60dSAndroid Build Coastguard Worker 
31*8617a60dSAndroid Build Coastguard Worker 
32*8617a60dSAndroid Build Coastguard Worker /* Boot device stub implementations to read from the image file */
VbExDiskRead(vb2ex_disk_handle_t handle,uint64_t lba_start,uint64_t lba_count,void * buffer)33*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExDiskRead(vb2ex_disk_handle_t handle, uint64_t lba_start,
34*8617a60dSAndroid Build Coastguard Worker 			 uint64_t lba_count, void *buffer)
35*8617a60dSAndroid Build Coastguard Worker {
36*8617a60dSAndroid Build Coastguard Worker 	printf("Read(%" PRIu64 ", %" PRIu64 ")\n", lba_start, lba_count);
37*8617a60dSAndroid Build Coastguard Worker 
38*8617a60dSAndroid Build Coastguard Worker 	if (lba_start >= disk_info.streaming_lba_count ||
39*8617a60dSAndroid Build Coastguard Worker 	    lba_start + lba_count > disk_info.streaming_lba_count) {
40*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr,
41*8617a60dSAndroid Build Coastguard Worker 			"Read overrun: %" PRIu64 " + %" PRIu64
42*8617a60dSAndroid Build Coastguard Worker 			" > %" PRIu64 "\n", lba_start,
43*8617a60dSAndroid Build Coastguard Worker 			lba_count, disk_info.streaming_lba_count);
44*8617a60dSAndroid Build Coastguard Worker 		return 1;
45*8617a60dSAndroid Build Coastguard Worker 	}
46*8617a60dSAndroid Build Coastguard Worker 
47*8617a60dSAndroid Build Coastguard Worker 	if (0 != fseek(image_file, lba_start * disk_info.bytes_per_lba,
48*8617a60dSAndroid Build Coastguard Worker 		       SEEK_SET) ||
49*8617a60dSAndroid Build Coastguard Worker 	    1 != fread(buffer, lba_count * disk_info.bytes_per_lba, 1,
50*8617a60dSAndroid Build Coastguard Worker 		       image_file)) {
51*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "Read error.");
52*8617a60dSAndroid Build Coastguard Worker 		return 1;
53*8617a60dSAndroid Build Coastguard Worker 	}
54*8617a60dSAndroid Build Coastguard Worker 	return VB2_SUCCESS;
55*8617a60dSAndroid Build Coastguard Worker }
56*8617a60dSAndroid Build Coastguard Worker 
57*8617a60dSAndroid Build Coastguard Worker 
VbExDiskWrite(vb2ex_disk_handle_t handle,uint64_t lba_start,uint64_t lba_count,const void * buffer)58*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExDiskWrite(vb2ex_disk_handle_t handle, uint64_t lba_start,
59*8617a60dSAndroid Build Coastguard Worker 			  uint64_t lba_count, const void *buffer)
60*8617a60dSAndroid Build Coastguard Worker {
61*8617a60dSAndroid Build Coastguard Worker 	printf("Write(%" PRIu64 ", %" PRIu64 ")\n", lba_start, lba_count);
62*8617a60dSAndroid Build Coastguard Worker 
63*8617a60dSAndroid Build Coastguard Worker 	if (lba_start >= disk_info.streaming_lba_count ||
64*8617a60dSAndroid Build Coastguard Worker 	    lba_start + lba_count > disk_info.streaming_lba_count) {
65*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr,
66*8617a60dSAndroid Build Coastguard Worker 			"Read overrun: %" PRIu64 " + %" PRIu64
67*8617a60dSAndroid Build Coastguard Worker 			" > %" PRIu64 "\n", lba_start, lba_count,
68*8617a60dSAndroid Build Coastguard Worker 			disk_info.streaming_lba_count);
69*8617a60dSAndroid Build Coastguard Worker 		return 1;
70*8617a60dSAndroid Build Coastguard Worker 	}
71*8617a60dSAndroid Build Coastguard Worker 
72*8617a60dSAndroid Build Coastguard Worker 	/* TODO: enable writes, once we're sure it won't trash
73*8617a60dSAndroid Build Coastguard Worker 	   our example file */
74*8617a60dSAndroid Build Coastguard Worker 	return VB2_SUCCESS;
75*8617a60dSAndroid Build Coastguard Worker 
76*8617a60dSAndroid Build Coastguard Worker 	fseek(image_file, lba_start * disk_info.bytes_per_lba, SEEK_SET);
77*8617a60dSAndroid Build Coastguard Worker 	if (1 != fwrite(buffer, lba_count * disk_info.bytes_per_lba, 1,
78*8617a60dSAndroid Build Coastguard Worker 			image_file)) {
79*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "Read error.");
80*8617a60dSAndroid Build Coastguard Worker 		return 1;
81*8617a60dSAndroid Build Coastguard Worker 	}
82*8617a60dSAndroid Build Coastguard Worker 	return VB2_SUCCESS;
83*8617a60dSAndroid Build Coastguard Worker }
84*8617a60dSAndroid Build Coastguard Worker 
85*8617a60dSAndroid Build Coastguard Worker 
86*8617a60dSAndroid Build Coastguard Worker #define BOOT_FLAG_DEVELOPER (1 << 0)
87*8617a60dSAndroid Build Coastguard Worker #define BOOT_FLAG_RECOVERY (1 << 1)
88*8617a60dSAndroid Build Coastguard Worker 
89*8617a60dSAndroid Build Coastguard Worker /* Main routine */
main(int argc,char * argv[])90*8617a60dSAndroid Build Coastguard Worker int main(int argc, char* argv[])
91*8617a60dSAndroid Build Coastguard Worker {
92*8617a60dSAndroid Build Coastguard Worker 	const char* image_name;
93*8617a60dSAndroid Build Coastguard Worker 	uint64_t key_size = 0;
94*8617a60dSAndroid Build Coastguard Worker 	struct vb2_packed_key *key_blob = NULL;
95*8617a60dSAndroid Build Coastguard Worker 	struct vb2_gbb_header* gbb;
96*8617a60dSAndroid Build Coastguard Worker 	vb2_error_t rv;
97*8617a60dSAndroid Build Coastguard Worker 	int c, argsleft;
98*8617a60dSAndroid Build Coastguard Worker 	int errorcnt = 0;
99*8617a60dSAndroid Build Coastguard Worker 	char *e = 0;
100*8617a60dSAndroid Build Coastguard Worker 
101*8617a60dSAndroid Build Coastguard Worker 	memset(&lkp, 0, sizeof(lkp));
102*8617a60dSAndroid Build Coastguard Worker 	disk_info.bytes_per_lba = LBA_BYTES;
103*8617a60dSAndroid Build Coastguard Worker 	int boot_flags = BOOT_FLAG_RECOVERY;
104*8617a60dSAndroid Build Coastguard Worker 
105*8617a60dSAndroid Build Coastguard Worker 	/* Parse options */
106*8617a60dSAndroid Build Coastguard Worker 	opterr = 0;
107*8617a60dSAndroid Build Coastguard Worker 	while ((c = getopt(argc, argv, ":b:")) != -1) {
108*8617a60dSAndroid Build Coastguard Worker 		switch (c) {
109*8617a60dSAndroid Build Coastguard Worker 		case 'b':
110*8617a60dSAndroid Build Coastguard Worker 			boot_flags = strtoull(optarg, &e, 0);
111*8617a60dSAndroid Build Coastguard Worker 			if (!*optarg || (e && *e)) {
112*8617a60dSAndroid Build Coastguard Worker 				fprintf(stderr,
113*8617a60dSAndroid Build Coastguard Worker 					"Invalid argument to -%c: \"%s\"\n",
114*8617a60dSAndroid Build Coastguard Worker 					c, optarg);
115*8617a60dSAndroid Build Coastguard Worker 				errorcnt++;
116*8617a60dSAndroid Build Coastguard Worker 			}
117*8617a60dSAndroid Build Coastguard Worker 			break;
118*8617a60dSAndroid Build Coastguard Worker 		case '?':
119*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Unrecognized switch: -%c\n", optopt);
120*8617a60dSAndroid Build Coastguard Worker 			errorcnt++;
121*8617a60dSAndroid Build Coastguard Worker 			break;
122*8617a60dSAndroid Build Coastguard Worker 		case ':':
123*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Missing argument to -%c\n", optopt);
124*8617a60dSAndroid Build Coastguard Worker 			errorcnt++;
125*8617a60dSAndroid Build Coastguard Worker 			break;
126*8617a60dSAndroid Build Coastguard Worker 		default:
127*8617a60dSAndroid Build Coastguard Worker 			errorcnt++;
128*8617a60dSAndroid Build Coastguard Worker 			break;
129*8617a60dSAndroid Build Coastguard Worker 		}
130*8617a60dSAndroid Build Coastguard Worker 	}
131*8617a60dSAndroid Build Coastguard Worker 
132*8617a60dSAndroid Build Coastguard Worker 	/* Update argc */
133*8617a60dSAndroid Build Coastguard Worker 	argsleft = argc - optind;
134*8617a60dSAndroid Build Coastguard Worker 
135*8617a60dSAndroid Build Coastguard Worker 	if (errorcnt || !argsleft) {
136*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr,
137*8617a60dSAndroid Build Coastguard Worker 			"usage: %s [options] <drive_image> [<sign_key>]\n",
138*8617a60dSAndroid Build Coastguard Worker 			argv[0]);
139*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "\noptions:\n");
140*8617a60dSAndroid Build Coastguard Worker 		/* These cases are because uint64_t isn't necessarily the same
141*8617a60dSAndroid Build Coastguard Worker 		   as ULL. */
142*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "  -b NUM     boot flag bits (default %d):\n",
143*8617a60dSAndroid Build Coastguard Worker 			BOOT_FLAG_RECOVERY);
144*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "               %d = developer mode on\n",
145*8617a60dSAndroid Build Coastguard Worker 			BOOT_FLAG_DEVELOPER);
146*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "               %d = recovery mode on\n",
147*8617a60dSAndroid Build Coastguard Worker 			BOOT_FLAG_RECOVERY);
148*8617a60dSAndroid Build Coastguard Worker 		return 1;
149*8617a60dSAndroid Build Coastguard Worker 	}
150*8617a60dSAndroid Build Coastguard Worker 
151*8617a60dSAndroid Build Coastguard Worker 	image_name = argv[optind];
152*8617a60dSAndroid Build Coastguard Worker 
153*8617a60dSAndroid Build Coastguard Worker 	/* Read header signing key blob */
154*8617a60dSAndroid Build Coastguard Worker 	if (argsleft > 1) {
155*8617a60dSAndroid Build Coastguard Worker 		key_blob = (struct vb2_packed_key *)
156*8617a60dSAndroid Build Coastguard Worker 			ReadFile(argv[optind+1], &key_size);
157*8617a60dSAndroid Build Coastguard Worker 		if (!key_blob) {
158*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Unable to read key file %s\n",
159*8617a60dSAndroid Build Coastguard Worker 				argv[optind+1]);
160*8617a60dSAndroid Build Coastguard Worker 			return 1;
161*8617a60dSAndroid Build Coastguard Worker 		}
162*8617a60dSAndroid Build Coastguard Worker 		printf("Read %" PRIu64 " bytes of key from %s\n", key_size,
163*8617a60dSAndroid Build Coastguard Worker 		       argv[optind+1]);
164*8617a60dSAndroid Build Coastguard Worker 		if (key_size > 16*1024*1024) {
165*8617a60dSAndroid Build Coastguard Worker 			fprintf(stderr, "Key blob size=%" PRIu64
166*8617a60dSAndroid Build Coastguard Worker 				" is ridiculous.\n", key_size);
167*8617a60dSAndroid Build Coastguard Worker 			free(key_blob);
168*8617a60dSAndroid Build Coastguard Worker 			return 1;
169*8617a60dSAndroid Build Coastguard Worker 		}
170*8617a60dSAndroid Build Coastguard Worker 	}
171*8617a60dSAndroid Build Coastguard Worker 
172*8617a60dSAndroid Build Coastguard Worker 	/* Initialize the GBB */
173*8617a60dSAndroid Build Coastguard Worker 	uint32_t gbb_size = sizeof(struct vb2_gbb_header) + key_size;
174*8617a60dSAndroid Build Coastguard Worker 	gbb = (struct vb2_gbb_header*)malloc(gbb_size);
175*8617a60dSAndroid Build Coastguard Worker 	memset(gbb, 0, gbb_size);
176*8617a60dSAndroid Build Coastguard Worker 	memcpy(gbb->signature, VB2_GBB_SIGNATURE, VB2_GBB_SIGNATURE_SIZE);
177*8617a60dSAndroid Build Coastguard Worker 	gbb->major_version = VB2_GBB_MAJOR_VER;
178*8617a60dSAndroid Build Coastguard Worker 	gbb->minor_version = VB2_GBB_MINOR_VER;
179*8617a60dSAndroid Build Coastguard Worker 	gbb->header_size = sizeof(struct vb2_gbb_header);
180*8617a60dSAndroid Build Coastguard Worker 	/* Fill in the given key, if any, for both root and recovery */
181*8617a60dSAndroid Build Coastguard Worker 	if (key_blob) {
182*8617a60dSAndroid Build Coastguard Worker 		gbb->rootkey_offset = gbb->header_size;
183*8617a60dSAndroid Build Coastguard Worker 		gbb->rootkey_size = key_size;
184*8617a60dSAndroid Build Coastguard Worker 		memcpy((uint8_t*)gbb + gbb->rootkey_offset, key_blob, key_size);
185*8617a60dSAndroid Build Coastguard Worker 
186*8617a60dSAndroid Build Coastguard Worker 		gbb->recovery_key_offset = gbb->rootkey_offset;
187*8617a60dSAndroid Build Coastguard Worker 		gbb->recovery_key_size = key_size;
188*8617a60dSAndroid Build Coastguard Worker 	}
189*8617a60dSAndroid Build Coastguard Worker 
190*8617a60dSAndroid Build Coastguard Worker 	printf("bootflags = %d\n", boot_flags);
191*8617a60dSAndroid Build Coastguard Worker 
192*8617a60dSAndroid Build Coastguard Worker 	/* Get image size */
193*8617a60dSAndroid Build Coastguard Worker 	printf("Reading from image: %s\n", image_name);
194*8617a60dSAndroid Build Coastguard Worker 	image_file = fopen(image_name, "rb");
195*8617a60dSAndroid Build Coastguard Worker 	if (!image_file) {
196*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "Unable to open image file %s\n", image_name);
197*8617a60dSAndroid Build Coastguard Worker 		return 1;
198*8617a60dSAndroid Build Coastguard Worker 	}
199*8617a60dSAndroid Build Coastguard Worker 	fseek(image_file, 0, SEEK_END);
200*8617a60dSAndroid Build Coastguard Worker 	disk_info.streaming_lba_count = (ftell(image_file) / LBA_BYTES);
201*8617a60dSAndroid Build Coastguard Worker 	disk_info.lba_count = disk_info.streaming_lba_count;
202*8617a60dSAndroid Build Coastguard Worker 	rewind(image_file);
203*8617a60dSAndroid Build Coastguard Worker 	printf("Streaming LBA count: %" PRIu64 "\n",
204*8617a60dSAndroid Build Coastguard Worker 	       disk_info.streaming_lba_count);
205*8617a60dSAndroid Build Coastguard Worker 
206*8617a60dSAndroid Build Coastguard Worker 	/* Allocate a buffer for the kernel */
207*8617a60dSAndroid Build Coastguard Worker 	lkp.kernel_buffer = malloc(KERNEL_BUFFER_SIZE);
208*8617a60dSAndroid Build Coastguard Worker 	if (!lkp.kernel_buffer) {
209*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "Unable to allocate kernel buffer.\n");
210*8617a60dSAndroid Build Coastguard Worker 		return 1;
211*8617a60dSAndroid Build Coastguard Worker 	}
212*8617a60dSAndroid Build Coastguard Worker 	lkp.kernel_buffer_size = KERNEL_BUFFER_SIZE;
213*8617a60dSAndroid Build Coastguard Worker 
214*8617a60dSAndroid Build Coastguard Worker 	/* Set up vboot context. */
215*8617a60dSAndroid Build Coastguard Worker 	if (vb2api_init(&workbuf, sizeof(workbuf), &ctx)) {
216*8617a60dSAndroid Build Coastguard Worker 		fprintf(stderr, "Can't initialize workbuf\n");
217*8617a60dSAndroid Build Coastguard Worker 		return 1;
218*8617a60dSAndroid Build Coastguard Worker 	}
219*8617a60dSAndroid Build Coastguard Worker 	sd = vb2_get_sd(ctx);
220*8617a60dSAndroid Build Coastguard Worker 
221*8617a60dSAndroid Build Coastguard Worker 	/* Copy kernel subkey to workbuf, if any */
222*8617a60dSAndroid Build Coastguard Worker 	if (key_blob) {
223*8617a60dSAndroid Build Coastguard Worker 		struct vb2_workbuf wb;
224*8617a60dSAndroid Build Coastguard Worker 		struct vb2_packed_key *dst;
225*8617a60dSAndroid Build Coastguard Worker 		uint32_t kernkey_size =
226*8617a60dSAndroid Build Coastguard Worker 			key_blob->key_offset + key_blob->key_size;
227*8617a60dSAndroid Build Coastguard Worker 		vb2_workbuf_from_ctx(ctx, &wb);
228*8617a60dSAndroid Build Coastguard Worker 		dst = vb2_workbuf_alloc(&wb, kernkey_size);
229*8617a60dSAndroid Build Coastguard Worker 		memcpy(dst, key_blob, kernkey_size);
230*8617a60dSAndroid Build Coastguard Worker 		vb2_set_workbuf_used(ctx, vb2_offset_of(sd, wb.buf));
231*8617a60dSAndroid Build Coastguard Worker 		sd->kernel_key_offset = vb2_offset_of(sd, dst);
232*8617a60dSAndroid Build Coastguard Worker 		sd->kernel_key_size = kernkey_size;
233*8617a60dSAndroid Build Coastguard Worker 	}
234*8617a60dSAndroid Build Coastguard Worker 
235*8617a60dSAndroid Build Coastguard Worker 	/* Free the key blob, now that we're done with it */
236*8617a60dSAndroid Build Coastguard Worker 	free(key_blob);
237*8617a60dSAndroid Build Coastguard Worker 
238*8617a60dSAndroid Build Coastguard Worker 	/* No need to initialize ctx->nvdata[]; defaults are fine */
239*8617a60dSAndroid Build Coastguard Worker 	/* TODO(chromium:441893): support dev-mode flag and external gpt flag */
240*8617a60dSAndroid Build Coastguard Worker 	if (boot_flags & BOOT_FLAG_RECOVERY)
241*8617a60dSAndroid Build Coastguard Worker 		ctx->flags |= VB2_CONTEXT_RECOVERY_MODE;
242*8617a60dSAndroid Build Coastguard Worker 	if (boot_flags & BOOT_FLAG_DEVELOPER)
243*8617a60dSAndroid Build Coastguard Worker 		ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE;
244*8617a60dSAndroid Build Coastguard Worker 
245*8617a60dSAndroid Build Coastguard Worker 	/* Call vb2api_load_kernel() */
246*8617a60dSAndroid Build Coastguard Worker 	rv = vb2api_load_kernel(ctx, &lkp, &disk_info);
247*8617a60dSAndroid Build Coastguard Worker 	printf("vb2api_load_kernel() returned %d\n", rv);
248*8617a60dSAndroid Build Coastguard Worker 
249*8617a60dSAndroid Build Coastguard Worker 	if (VB2_SUCCESS == rv) {
250*8617a60dSAndroid Build Coastguard Worker 		printf("Partition number:   %u\n", lkp.partition_number);
251*8617a60dSAndroid Build Coastguard Worker 		printf("Bootloader offset: %" PRIu64 "\n",
252*8617a60dSAndroid Build Coastguard Worker 		       lkp.bootloader_offset);
253*8617a60dSAndroid Build Coastguard Worker 		printf("Bootloader size:    %u\n", lkp.bootloader_size);
254*8617a60dSAndroid Build Coastguard Worker 		printf("Partition guid:	    "
255*8617a60dSAndroid Build Coastguard Worker 		       "%02x%02x%02x%02x-%02x%02x-%02x%02x"
256*8617a60dSAndroid Build Coastguard Worker 		       "-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
257*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[3],
258*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[2],
259*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[1],
260*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[0],
261*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[5],
262*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[4],
263*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[7],
264*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[6],
265*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[8],
266*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[9],
267*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[10],
268*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[11],
269*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[12],
270*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[13],
271*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[14],
272*8617a60dSAndroid Build Coastguard Worker 		       lkp.partition_guid[15]);
273*8617a60dSAndroid Build Coastguard Worker 	}
274*8617a60dSAndroid Build Coastguard Worker 
275*8617a60dSAndroid Build Coastguard Worker 	fclose(image_file);
276*8617a60dSAndroid Build Coastguard Worker 	free(lkp.kernel_buffer);
277*8617a60dSAndroid Build Coastguard Worker 	return rv != VB2_SUCCESS;
278*8617a60dSAndroid Build Coastguard Worker }
279