]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - arch/arm/mach-imx/spl.c
arm: imx: hab: Fix authenticate_image input parameters
[people/ms/u-boot.git] / arch / arm / mach-imx / spl.c
index 31b4b0fcfc52cc4d3c38c7c70c5ffba0929ae407..141579dbad3999cf1d446145e9d2c3811653a826 100644 (file)
@@ -155,9 +155,41 @@ u32 spl_boot_mode(const u32 boot_device)
 
 #if defined(CONFIG_SECURE_BOOT)
 
+/*
+ * +------------+  0x0 (DDR_UIMAGE_START) -
+ * |   Header   |                          |
+ * +------------+  0x40                    |
+ * |            |                          |
+ * |            |                          |
+ * |            |                          |
+ * |            |                          |
+ * | Image Data |                          |
+ * .            |                          |
+ * .            |                           > Stuff to be authenticated ----+
+ * .            |                          |                                |
+ * |            |                          |                                |
+ * |            |                          |                                |
+ * +------------+                          |                                |
+ * |            |                          |                                |
+ * | Fill Data  |                          |                                |
+ * |            |                          |                                |
+ * +------------+ Align to ALIGN_SIZE      |                                |
+ * |    IVT     |                          |                                |
+ * +------------+ + IVT_SIZE              -                                 |
+ * |            |                                                           |
+ * |  CSF DATA  | <---------------------------------------------------------+
+ * |            |
+ * +------------+
+ * |            |
+ * | Fill Data  |
+ * |            |
+ * +------------+ + CSF_PAD_SIZE
+ */
+
 __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 {
        typedef void __noreturn (*image_entry_noargs_t)(void);
+       uint32_t offset;
 
        image_entry_noargs_t image_entry =
                (image_entry_noargs_t)(unsigned long)spl_image->entry_point;
@@ -166,8 +198,9 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 
        /* HAB looks for the CSF at the end of the authenticated data therefore,
         * we need to subtract the size of the CSF from the actual filesize */
+       offset = spl_image->size - CONFIG_CSF_SIZE;
        if (!authenticate_image(spl_image->load_addr,
-                               spl_image->size - CONFIG_CSF_SIZE)) {
+                               offset + IVT_SIZE + CSF_PAD_SIZE, offset)) {
                image_entry();
        } else {
                puts("spl: ERROR:  image authentication unsuccessful\n");