app: aboot: Adds support to authenticate boot image with device tree.
Change-Id: Id49070fbdee6d109e62fcd0f543becf53c0dd344
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index db5d108..eeffeaa 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -454,6 +454,7 @@
struct dt_table *table;
struct dt_entry *dt_entry_ptr;
unsigned dt_table_offset;
+ uint32_t dt_actual;
#endif
uhdr = (struct boot_img_hdr *)EMMC_BOOT_IMG_HEADER_ADDR;
@@ -505,8 +506,12 @@
image_addr = (unsigned char *)target_get_scratch_address();
kernel_actual = ROUND_TO_PAGE(hdr->kernel_size, page_mask);
ramdisk_actual = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask);
+#if DEVICE_TREE
+ dt_actual = ROUND_TO_PAGE(hdr->dt_size, page_mask);
+ imagesize_actual = (page_size + kernel_actual + ramdisk_actual + dt_actual);
+#else
imagesize_actual = (page_size + kernel_actual + ramdisk_actual);
-
+#endif
offset = 0;
/* Assuming device rooted at this time */
@@ -550,6 +555,9 @@
/* Move kernel, ramdisk and device tree to correct address */
memmove((void*) hdr->kernel_addr, (char *)(image_addr + page_size), hdr->kernel_size);
memmove((void*) hdr->ramdisk_addr, (char *)(image_addr + page_size + kernel_actual), hdr->ramdisk_size);
+#if DEVICE_TREE
+ memmove((void*) hdr->tags_addr, (char *)(image_addr + page_size + kernel_actual + ramdisk_actual), hdr->dt_size);
+#endif
#if DEVICE_TREE
if(hdr->dt_size) {
@@ -693,9 +701,9 @@
#if DEVICE_TREE
struct dt_table *table;
struct dt_entry *dt_entry_ptr;
+ uint32_t dt_actual;
#endif
-
if (target_is_emmc_boot()) {
hdr = (struct boot_img_hdr *)EMMC_BOOT_IMG_HEADER_ADDR;
if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
@@ -755,8 +763,12 @@
image_addr = (unsigned char *)target_get_scratch_address();
kernel_actual = ROUND_TO_PAGE(hdr->kernel_size, page_mask);
ramdisk_actual = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask);
+#if DEVICE_TREE
+ dt_actual = ROUND_TO_PAGE(hdr->dt_size, page_mask);
+ imagesize_actual = (page_size + kernel_actual + ramdisk_actual + dt_actual);
+#else
imagesize_actual = (page_size + kernel_actual + ramdisk_actual);
-
+#endif
offset = 0;
/* Assuming device rooted at this time */
@@ -801,6 +813,9 @@
/* Move kernel and ramdisk to correct address */
memmove((void*) hdr->kernel_addr, (char *)(image_addr + page_size), hdr->kernel_size);
memmove((void*) hdr->ramdisk_addr, (char *)(image_addr + page_size + kernel_actual), hdr->ramdisk_size);
+#if DEVICE_TREE
+ memmove((void*) hdr->tags_addr, (char *)(image_addr + page_size + kernel_actual + ramdisk_actual), hdr->dt_size);
+#endif
/* Make sure everything from scratch address is read before next step!*/
if(device.is_tampered)