Merge "app: aboot: change to pass loaded partition buffers for verification"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index e478e49..a282275 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -1755,8 +1755,10 @@
vbcmdline = info.vbcmdline;
/* Free the buffer allocated to vbmeta post verification */
- free(vbmeta_image_buf);
- --info.num_loaded_images;
+ if (vbmeta_image_buf != NULL) {
+ free(vbmeta_image_buf);
+ --info.num_loaded_images;
+ }
#else
/* Change the condition a little bit to include the test framework support.
* We would never reach this point if device is in fastboot mode, even if we did
@@ -2939,6 +2941,12 @@
unsigned char *kernel_start_addr = NULL;
unsigned int kernel_size = 0;
unsigned int scratch_offset = 0;
+#if VERIFIED_BOOT_2
+ void *dtbo_image_buf = NULL;
+ uint32_t dtbo_image_sz = 0;
+ void *vbmeta_image_buf = NULL;
+ uint32_t vbmeta_image_sz = 0;
+#endif
#if !VERIFIED_BOOT_2
uint32_t sig_actual = 0;
uint32_t sig_size = 0;
@@ -2995,16 +3003,48 @@
fastboot_fail("bootimage header fields are invalid");
goto boot_failed;
}
+
#if VERIFIED_BOOT_2
+
+ /* load and validate dtbo partition */
+ load_validate_dtbo_image(&dtbo_image_buf, &dtbo_image_sz);
+
+ /* load vbmeta partition */
+ load_vbmeta_image(&vbmeta_image_buf, &vbmeta_image_sz);
+
memset(&info, 0, sizeof(bootinfo));
- info.images[0].image_buffer = data;
- info.images[0].imgsize = image_actual;
- info.images[0].name = "boot";
- info.num_loaded_images = 1;
+
+ info.images[IMG_BOOT].image_buffer = SUB_SALT_BUFF_OFFSET(data);
+ info.images[IMG_BOOT].imgsize = image_actual;
+ info.images[IMG_BOOT].name = "boot";
+ ++info.num_loaded_images;
+
+ /* Pass loaded dtbo image */
+ if (dtbo_image_buf != NULL) {
+ info.images[IMG_DTBO].image_buffer = SUB_SALT_BUFF_OFFSET(dtbo_image_buf);
+ info.images[IMG_DTBO].imgsize = dtbo_image_sz;
+ info.images[IMG_DTBO].name = "dtbo";
+ ++info.num_loaded_images;
+ }
+
+ /* Pass loaded vbmeta image */
+ if (vbmeta_image_buf != NULL) {
+ info.images[IMG_VBMETA].image_buffer = vbmeta_image_buf;
+ info.images[IMG_VBMETA].imgsize = vbmeta_image_sz;
+ info.images[IMG_VBMETA].name = "vbmeta";
+ ++info.num_loaded_images;
+ }
+
info.multi_slot_boot = partition_multislot_is_supported();
if (load_image_and_auth(&info))
goto boot_failed;
vbcmdline = info.vbcmdline;
+
+ /* Free the buffer allocated to vbmeta post verification */
+ if (vbmeta_image_buf != NULL) {
+ free(vbmeta_image_buf);
+ --info.num_loaded_images;
+ }
#else
sig_size = sz - image_actual;
@@ -3087,6 +3127,10 @@
out_addr = (unsigned char *)target_get_scratch_address();
out_addr = (unsigned char *)(out_addr + image_actual + page_size);
out_avai_len = target_get_max_flash_size() - image_actual - page_size;
+#if VERIFIED_BOOT_2
+ if (dtbo_image_sz)
+ out_avai_len -= DTBO_IMG_BUF;
+#endif
dprintf(INFO, "decompressing kernel image: start\n");
ret = decompress((unsigned char *)(ptr + page_size),
hdr->kernel_size, out_addr, out_avai_len,