blob: 62c60f7b5de6599d45a0a2f6ecd1ffd5c62a180d [file] [log] [blame]
Angel Pons3ef916f2020-04-02 23:49:13 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Wim Vervoorn82100472020-01-27 15:47:44 +01002
Frans Hendriks72b3c3c2019-07-26 07:59:05 +02003#include <boot_device.h>
Wim Vervoorn46cc24d2019-11-14 11:45:03 +01004#include <bootmem.h>
Bill XIE516c0a52020-02-24 23:08:35 +08005#include <bootmode.h>
Frans Hendriks72b3c3c2019-07-26 07:59:05 +02006#include <cbfs.h>
Arthur Heymansac522f12021-07-25 10:40:53 +02007#include <fmap_config.h>
Jon Murphyd7b8dc92023-09-05 11:36:43 -06008#include <security/tpm/tss_errors.h>
Frans Hendriks72b3c3c2019-07-26 07:59:05 +02009#include <vboot_check.h>
10#include <vboot_common.h>
Joel Kitching172ef5f2020-02-14 16:08:45 +080011#include <vb2_internals_please_do_not_use.h>
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020012
13#define RSA_PUBLICKEY_FILE_NAME "vboot_public_key.bin"
14
15#if CONFIG(VENDORCODE_ELTAN_VBOOT_USE_SHA512)
16#define DIGEST_SIZE VB2_SHA512_DIGEST_SIZE
Wim Vervoornac4896f2019-10-30 15:55:21 +010017#define HASH_ALG VB2_HASH_SHA512
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020018#else
19#define DIGEST_SIZE VB2_SHA256_DIGEST_SIZE
Wim Vervoornac4896f2019-10-30 15:55:21 +010020#define HASH_ALG VB2_HASH_SHA256
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020021#endif
22
23int verified_boot_check_manifest(void)
24{
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020025 uint8_t *buffer;
Wim Vervoorn82100472020-01-27 15:47:44 +010026 struct vb2_context *ctx;
27 struct vb2_kernel_preamble *pre;
28 static struct vb2_shared_data *sd;
29 size_t size;
Frans Hendriks70231742020-04-20 13:37:00 +020030 uint8_t wb_buffer[3000];
Wim Vervoorn82100472020-01-27 15:47:44 +010031
32 if (vb2api_init(&wb_buffer, sizeof(wb_buffer), &ctx)) {
33 goto fail;
34 }
35
36 sd = vb2_get_sd(ctx);
Wim Vervoornac4896f2019-10-30 15:55:21 +010037
Julius Werner834b3ec2020-03-04 16:52:08 -080038 buffer = cbfs_map(RSA_PUBLICKEY_FILE_NAME, &size);
Wim Vervoornac4896f2019-10-30 15:55:21 +010039 if (!buffer || !size) {
Julius Wernere9665952022-01-21 17:06:20 -080040 printk(BIOS_ERR, "Public key not found!\n");
Wim Vervoornac4896f2019-10-30 15:55:21 +010041 goto fail;
42 }
43
44 if ((size != CONFIG_VENDORCODE_ELTAN_VBOOT_KEY_SIZE) ||
Wim Vervoorn82100472020-01-27 15:47:44 +010045 (buffer != (void *)CONFIG_VENDORCODE_ELTAN_VBOOT_KEY_LOCATION)) {
Julius Wernere9665952022-01-21 17:06:20 -080046 printk(BIOS_ERR, "Illegal public key!\n");
Wim Vervoornac4896f2019-10-30 15:55:21 +010047 goto fail;
48 }
49
Wim Vervoorn82100472020-01-27 15:47:44 +010050 /*
51 * Check if all items will fit into workbuffer:
52 * vb2_shared data, Public Key, Preamble data
53 */
54 if ((sd->workbuf_used + size + sizeof(struct vb2_kernel_preamble) +
55 ((CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_ITEMS * DIGEST_SIZE) + (2048/8))) >
56 sizeof(wb_buffer)) {
Julius Wernere9665952022-01-21 17:06:20 -080057 printk(BIOS_ERR, "Work buffer too small\n");
Wim Vervoornac4896f2019-10-30 15:55:21 +010058 goto fail;
59 }
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020060
Wim Vervoorn82100472020-01-27 15:47:44 +010061 /* Add public key */
62 sd->data_key_offset = sd->workbuf_used;
63 sd->data_key_size = size;
64 sd->workbuf_used += sd->data_key_size;
65 memcpy((void *)((void *)sd + (long)sd->data_key_offset), (uint8_t *)buffer, size);
66
67 /* Fill preamble area */
68 sd->preamble_size = sizeof(struct vb2_kernel_preamble);
69 sd->preamble_offset = sd->data_key_offset + sd->data_key_size;
70 sd->workbuf_used += sd->preamble_size;
71 pre = (struct vb2_kernel_preamble *)((void *)sd + (long)sd->preamble_offset);
72
73 pre->flags = VB2_FIRMWARE_PREAMBLE_DISALLOW_HWCRYPTO;
74
75 /* Fill body_signature (vb2_structure). RSA2048 key is used */
Julius Werner834b3ec2020-03-04 16:52:08 -080076 cbfs_map("oemmanifest.bin", &size);
Wim Vervoorn82100472020-01-27 15:47:44 +010077 if (size != ((CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_ITEMS * DIGEST_SIZE) + (2048/8))) {
Julius Wernere9665952022-01-21 17:06:20 -080078 printk(BIOS_ERR, "Incorrect manifest size!\n");
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020079 goto fail;
80 }
Wim Vervoorn82100472020-01-27 15:47:44 +010081 pre->body_signature.data_size = CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_ITEMS *
82 DIGEST_SIZE;
83 pre->body_signature.sig_offset = sizeof(struct vb2_signature) +
84 pre->body_signature.data_size;
Frans Hendriks988a2732020-04-20 13:58:07 +020085 pre->body_signature.sig_size = size - pre->body_signature.data_size;
Wim Vervoorn82100472020-01-27 15:47:44 +010086 sd->workbuf_used += size;
87 memcpy((void *)((void *)&pre->body_signature + (long)sizeof(struct vb2_signature)),
Wim Vervoorn944fdc42019-10-30 16:46:41 +010088 (uint8_t *)CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_LOC, size);
Wim Vervoornac4896f2019-10-30 15:55:21 +010089
Wim Vervoorn82100472020-01-27 15:47:44 +010090
91 if (vb2api_verify_kernel_data(ctx, (void *)CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_LOC,
92 pre->body_signature.data_size))
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020093 goto fail;
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020094
Wim Vervoornac4896f2019-10-30 15:55:21 +010095 printk(BIOS_INFO, "%s: Successfully verified hash_table signature.\n", __func__);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +020096 return 0;
97
98fail:
Wim Vervoorn82100472020-01-27 15:47:44 +010099 die("ERROR: HASH table verification failed!\n");
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200100 return -1;
101}
102
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200103/*
104 *
105 * measure_item
106 *
107 * extends the defined pcr using the hash calculated by the verified boot
108 * routines.
109 *
110 * @param[in] pcr PCR to extend
111 * @param[in] *hashData Pointer to the hash data
112 * @param[in] hashDataLen Length of the hash data
113 * @param[in] *event_msg Message to log or display
114 * @param[in] eventType Event type to use when logging
115
116 * @retval TPM_SUCCESS Operation completed successfully.
Jon Murphy056952e2023-09-05 10:44:09 -0600117 * @retval TPM_IOERROR Unexpected device behavior.
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200118 */
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600119static tpm_result_t measure_item(uint32_t pcr, uint8_t *hashData, uint32_t hashDataLen,
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200120 int8_t *event_msg, TCG_EVENTTYPE eventType)
121{
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600122 tpm_result_t rc = TPM_SUCCESS;
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200123 TCG_PCR_EVENT2_HDR tcgEventHdr;
124
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200125 memset(&tcgEventHdr, 0, sizeof(tcgEventHdr));
126 tcgEventHdr.pcrIndex = pcr;
127 tcgEventHdr.eventType = eventType;
128 if (event_msg) {
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600129 rc = mboot_hash_extend_log(MBOOT_HASH_PROVIDED, hashData,
Wim Vervoornac4896f2019-10-30 15:55:21 +0100130 hashDataLen, &tcgEventHdr,
131 (uint8_t *)event_msg);
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600132 if (rc == TPM_SUCCESS)
Wim Vervoornac4896f2019-10-30 15:55:21 +0100133 printk(BIOS_INFO, "%s: Success! %s measured to pcr %d.\n", __func__,
134 event_msg, pcr);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200135 }
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600136 return rc;
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200137}
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200138
Wim Vervoornac4896f2019-10-30 15:55:21 +0100139static void verified_boot_check_buffer(const char *name, void *start, size_t size,
140 uint32_t hash_index, int32_t pcr)
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200141{
142 uint8_t digest[DIGEST_SIZE];
Wim Vervoornac4896f2019-10-30 15:55:21 +0100143 vb2_error_t status;
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600144 tpm_result_t rc = TPM_SUCCESS;
Wim Vervoornac4896f2019-10-30 15:55:21 +0100145
146 printk(BIOS_DEBUG, "%s: %s HASH verification buffer %p size %d\n", __func__, name,
147 start, (int)size);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200148
149 if (start && size) {
Julius Wernerd96ca242022-08-08 18:08:35 -0700150 struct vb2_hash tmp_hash;
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200151
Julius Wernerd96ca242022-08-08 18:08:35 -0700152 status = vb2_hash_calculate(false, start, size, HASH_ALG, &tmp_hash);
153 if (!status)
154 memcpy(digest, tmp_hash.raw, DIGEST_SIZE);
155
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200156 if ((CONFIG(VENDORCODE_ELTAN_VBOOT) && memcmp((void *)(
157 (uint8_t *)CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_LOC +
Wim Vervoornac4896f2019-10-30 15:55:21 +0100158 sizeof(digest) * hash_index), digest, sizeof(digest))) || status) {
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200159 printk(BIOS_DEBUG, "%s: buffer hash\n", __func__);
160 hexdump(digest, sizeof(digest));
161 printk(BIOS_DEBUG, "%s: manifest hash\n", __func__);
Wim Vervoornac4896f2019-10-30 15:55:21 +0100162 hexdump((void *)( (uint8_t *)CONFIG_VENDORCODE_ELTAN_OEM_MANIFEST_LOC +
163 sizeof(digest) * hash_index), sizeof(digest));
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200164 printk(BIOS_EMERG, "%s ", name);
165 die("HASH verification failed!\n");
166 } else {
Kyösti Mälkkibf43f9e2019-11-05 17:55:15 +0200167 if (!ENV_BOOTBLOCK && CONFIG(VENDORCODE_ELTAN_MBOOT)) {
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200168 if (pcr != -1) {
Wim Vervoornffe4eba2019-11-14 11:06:35 +0100169 printk(BIOS_DEBUG, "%s: measuring %s\n", __func__,
170 name);
Jon Murphyd7b8dc92023-09-05 11:36:43 -0600171 rc = measure_item(pcr, digest, sizeof(digest),
172 (int8_t *)name, 0);
173 if (rc)
174 printk(BIOS_DEBUG, "%s: measuring failed with error %#x!\n",
175 __func__, rc);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200176 }
177 }
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200178 if (CONFIG(VENDORCODE_ELTAN_VBOOT))
Wim Vervoornac4896f2019-10-30 15:55:21 +0100179 printk(BIOS_DEBUG, "%s HASH verification success\n", name);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200180 }
181 } else {
Wim Vervoornac4896f2019-10-30 15:55:21 +0100182 printk(BIOS_EMERG, "Invalid buffer\n");
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200183 die("HASH verification failed!\n");
184 }
185}
186
Arthur Heymansac522f12021-07-25 10:40:53 +0200187#if FMAP_SECTION_COREBOOT_START < (0xffffffff - CONFIG_ROM_SIZE + 1)
188#define COREBOOT_CBFS_START (0xffffffff - CONFIG_ROM_SIZE + 1 + FMAP_SECTION_COREBOOT_START)
189#else
190#define COREBOOT_CBFS_START FMAP_SECTION_COREBOOT_START
191#endif
192
Wim Vervoornac4896f2019-10-30 15:55:21 +0100193void verified_boot_check_cbfsfile(const char *name, uint32_t type, uint32_t hash_index,
194 void **buffer, uint32_t *filesize, int32_t pcr)
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200195{
196 void *start;
197 size_t size;
198
Julius Werner834b3ec2020-03-04 16:52:08 -0800199 start = cbfs_map(name, &size);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200200 if (start && size) {
Wim Vervoornac4896f2019-10-30 15:55:21 +0100201 /* Speed up processing by copying the file content to memory first */
Wim Vervoorn46cc24d2019-11-14 11:45:03 +0100202 if (!ENV_ROMSTAGE_OR_BEFORE && (type & VERIFIED_BOOT_COPY_BLOCK)) {
203
204 if ((buffer) && (*buffer) && (*filesize >= size) &&
Arthur Heymansac522f12021-07-25 10:40:53 +0200205 ((uint32_t) start > COREBOOT_CBFS_START)) {
Wim Vervoorn46cc24d2019-11-14 11:45:03 +0100206
207 /* Use the buffer passed in if possible */
Wim Vervoornac4896f2019-10-30 15:55:21 +0100208 printk(BIOS_DEBUG, "%s: move buffer to memory\n", __func__);
Wim Vervoorn46cc24d2019-11-14 11:45:03 +0100209 /* Move the file to memory buffer passed in */
210 memcpy(*buffer, start, size);
211 start = *buffer;
212 printk(BIOS_DEBUG, "%s: done\n", __func__);
213
214 } else if (ENV_RAMSTAGE) {
215 /* Try to allocate a buffer from boot_mem */
216 void *local_buffer = bootmem_allocate_buffer(size);
217
218 if (local_buffer) {
219
220 /* Use the allocated buffer */
221 printk(BIOS_DEBUG, "%s: move file to memory\n",
222 __func__);
223 memcpy(local_buffer, start, size);
224 start = local_buffer;
225 printk(BIOS_DEBUG, "%s: done\n", __func__);
226 }
227 }
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200228 }
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200229 verified_boot_check_buffer(name, start, size, hash_index, pcr);
230 } else {
Wim Vervoornac4896f2019-10-30 15:55:21 +0100231 printk(BIOS_EMERG, "CBFS Failed to get file content for %s\n", name);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200232 die("HASH verification failed!\n");
233 }
234 if (buffer)
235 *buffer = start;
236 if (filesize)
237 *filesize = size;
238}
239
240void process_verify_list(const verify_item_t list[])
241{
242 int i = 0;
243
244 while (list[i].type != VERIFY_TERMINATOR) {
245 switch (list[i].type) {
246 case VERIFY_FILE:
Wim Vervoornac4896f2019-10-30 15:55:21 +0100247 verified_boot_check_cbfsfile(list[i].name, list[i].data.file.cbfs_type,
248 list[i].hash_index, NULL, NULL, list[i].pcr);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200249 if (list[i].data.file.related_items) {
250 printk(BIOS_SPEW, "process related items\n");
Wim Vervoornac4896f2019-10-30 15:55:21 +0100251 process_verify_list(
252 (verify_item_t *)list[i].data.file.related_items);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200253 }
254 break;
255 case VERIFY_BLOCK:
256 verified_boot_check_buffer(list[i].name,
Wim Vervoornac4896f2019-10-30 15:55:21 +0100257 (void *)list[i].data.block.start,
258 list[i].data.block.size,
259 list[i].hash_index, list[i].pcr);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200260 break;
261 default:
Jon Murphy53fc6672023-09-26 21:05:37 -0600262 printk(BIOS_EMERG, "INVALID TYPE IN VERIFY LIST %#x\n", list[i].type);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200263 die("HASH verification failed!\n");
264 }
265 i++;
266 }
267}
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200268
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200269/*
270 * BOOTBLOCK
271 */
272
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200273void verified_boot_bootblock_check(void)
274{
275 printk(BIOS_SPEW, "%s: processing bootblock items\n", __func__);
276
277 if (CONFIG(VENDORCODE_ELTAN_VBOOT_SIGNED_MANIFEST)) {
278 printk(BIOS_SPEW, "%s: check the manifest\n", __func__);
279 if (verified_boot_check_manifest() != 0)
280 die("invalid manifest");
281 }
282 printk(BIOS_SPEW, "%s: process bootblock verify list\n", __func__);
283 process_verify_list(bootblock_verify_list);
284}
285
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200286/*
287 * ROMSTAGE
288 */
289
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200290void verified_boot_early_check(void)
291{
292 printk(BIOS_SPEW, "%s: processing early items\n", __func__);
293
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200294 if (CONFIG(VENDORCODE_ELTAN_MBOOT)) {
Jon Murphy53fc6672023-09-26 21:05:37 -0600295 printk(BIOS_DEBUG, "mb_measure returned %#x\n",
Bill XIE516c0a52020-02-24 23:08:35 +0800296 mb_measure(platform_is_resuming()));
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200297 }
298
299 printk(BIOS_SPEW, "%s: process early verify list\n", __func__);
300 process_verify_list(romstage_verify_list);
301}
302
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200303/*
304 * RAM STAGE
305 */
306
307static int process_oprom_list(const verify_item_t list[],
308 struct rom_header *rom_header)
309{
310 int i = 0;
311 struct pci_data *rom_data;
312 uint32_t viddevid = 0;
313
314 if (le32_to_cpu(rom_header->signature) != PCI_ROM_HDR) {
Wim Vervoornac4896f2019-10-30 15:55:21 +0100315 printk(BIOS_ERR, "Incorrect expansion ROM header signature %04x DONT START\n",
316 le32_to_cpu(rom_header->signature));
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200317 return 0;
318 }
319
320 rom_data = (((void *)rom_header) + le32_to_cpu(rom_header->data));
321
322 viddevid |= (rom_data->vendor << 16);
323 viddevid |= rom_data->device;
324
325 while (list[i].type != VERIFY_TERMINATOR) {
326 switch (list[i].type) {
327 case VERIFY_OPROM:
328 if (viddevid == list[i].data.oprom.viddev) {
329 verified_boot_check_buffer(list[i].name,
Wim Vervoornac4896f2019-10-30 15:55:21 +0100330 (void *)rom_header,
331 rom_header->size * 512,
332 list[i].hash_index, list[i].pcr);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200333 if (list[i].data.oprom.related_items) {
Wim Vervoornac4896f2019-10-30 15:55:21 +0100334 printk(BIOS_SPEW, "%s: process related items\n",
335 __func__);
336 process_verify_list(
337 (verify_item_t *)list[i].data.oprom.related_items);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200338 }
Wim Vervoornac4896f2019-10-30 15:55:21 +0100339 printk(BIOS_SPEW, "%s: option rom can be started\n", __func__);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200340 return 1;
341 }
342 break;
343 default:
Jon Murphy53fc6672023-09-26 21:05:37 -0600344 printk(BIOS_EMERG, "%s: INVALID TYPE IN OPTION ROM LIST %#x\n",
Wim Vervoornac4896f2019-10-30 15:55:21 +0100345 __func__, list[i].type);
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200346 die("HASH verification failed!\n");
347 }
348 i++;
349 }
350 printk(BIOS_ERR, "%s: option rom not in list DONT START\n", __func__);
351 return 0;
352}
353
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200354int verified_boot_should_run_oprom(struct rom_header *rom_header)
355{
356 return process_oprom_list(oprom_verify_list, rom_header);
357}
358
Wim Vervoorne05dc172019-11-14 09:50:59 +0100359int prog_locate_hook(struct prog *prog)
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200360{
Frans Hendriks70dca082020-12-22 14:34:23 +0100361 static int initialized;
362
Wim Vervoornf4a30472019-11-14 10:03:25 +0100363 if (ENV_BOOTBLOCK)
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200364 verified_boot_bootblock_check();
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200365
Arthur Heymansa2bc2542021-05-29 08:10:49 +0200366 if (ENV_RAMINIT) {
Frans Hendriks70dca082020-12-22 14:34:23 +0100367 if (!initialized && ((prog->type == PROG_REFCODE) ||
368 (prog->type == PROG_POSTCAR))) {
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200369 verified_boot_early_check();
Frans Hendriks70dca082020-12-22 14:34:23 +0100370 initialized = 1;
371 }
Wim Vervoornf4a30472019-11-14 10:03:25 +0100372
373 if (CONFIG(POSTCAR_STAGE) && prog->type == PROG_POSTCAR)
374 process_verify_list(postcar_verify_list);
375
376 if (!CONFIG(POSTCAR_STAGE) && prog->type == PROG_RAMSTAGE)
377 process_verify_list(ramstage_verify_list);
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200378 }
379
Wim Vervoornf4a30472019-11-14 10:03:25 +0100380 if (ENV_POSTCAR && prog->type == PROG_RAMSTAGE)
381 process_verify_list(ramstage_verify_list);
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200382
Wim Vervoornf4a30472019-11-14 10:03:25 +0100383 if (ENV_RAMSTAGE && prog->type == PROG_PAYLOAD)
Kyösti Mälkkied8eaab2019-11-05 17:12:42 +0200384 process_verify_list(payload_verify_list);
Wim Vervoornf4a30472019-11-14 10:03:25 +0100385
Wim Vervoorne05dc172019-11-14 09:50:59 +0100386 return 0;
Frans Hendriks72b3c3c2019-07-26 07:59:05 +0200387}