public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [RFC][PATCH] spl: vboot: Verify content before using load_addr
@ 2018-06-06  1:08 Teddy Reed
  2018-06-06  8:35 ` Jun Nie
  0 siblings, 1 reply; 3+ messages in thread
From: Teddy Reed @ 2018-06-06  1:08 UTC (permalink / raw)
  To: u-boot

When using verified-boot in the SPL, the FIT content must be
verified before it can be used.

Currently the load_addr FIT property is read and used as input to
memcpy before the property is verified.

Signed-off-by: Teddy Reed <teddy.reed@gmail.com>
---
 common/spl/spl_fit.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
index 2321ebb0dde..a35c6092cee 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -244,6 +244,16 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
 		src = (void *)data;
 	}
 
+#ifdef CONFIG_SPL_FIT_SIGNATURE
+	printf("## Checking hash(es) for Image %s ...\n",
+	       fit_get_name(fit, node, NULL));
+	ret = fit_image_verify_with_data(fit, node,
+					 (const void *)src, length);
+	printf("\n");
+	if (!ret)
+		return 1;
+#endif
+
 #ifdef CONFIG_SPL_FIT_IMAGE_POST_PROCESS
 	board_fit_image_post_process(&src, &length);
 #endif
@@ -269,16 +279,7 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
 		image_info->entry_point = fdt_getprop_u32(fit, node, "entry");
 	}
 
-#ifdef CONFIG_SPL_FIT_SIGNATURE
-	printf("## Checking hash(es) for Image %s ...\n",
-	       fit_get_name(fit, node, NULL));
-	ret = fit_image_verify_with_data(fit, node,
-					 (const void *)load_addr, length);
-	printf("\n");
-	return !ret;
-#else
 	return 0;
-#endif
 }
 
 static int spl_fit_append_fdt(struct spl_image_info *spl_image,
-- 
2.13.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [RFC][PATCH] spl: vboot: Verify content before using load_addr
  2018-06-06  1:08 [U-Boot] [RFC][PATCH] spl: vboot: Verify content before using load_addr Teddy Reed
@ 2018-06-06  8:35 ` Jun Nie
  2018-06-06 15:32   ` Teddy Reed
  0 siblings, 1 reply; 3+ messages in thread
From: Jun Nie @ 2018-06-06  8:35 UTC (permalink / raw)
  To: u-boot

2018-06-06 9:08 GMT+08:00 Teddy Reed <teddy.reed@gmail.com>:
> When using verified-boot in the SPL, the FIT content must be
> verified before it can be used.
>
> Currently the load_addr FIT property is read and used as input to
> memcpy before the property is verified.
>
> Signed-off-by: Teddy Reed <teddy.reed@gmail.com>
> ---

Reviewed-by: Jun Nie <jun.nie@linaro.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] [RFC][PATCH] spl: vboot: Verify content before using load_addr
  2018-06-06  8:35 ` Jun Nie
@ 2018-06-06 15:32   ` Teddy Reed
  0 siblings, 0 replies; 3+ messages in thread
From: Teddy Reed @ 2018-06-06 15:32 UTC (permalink / raw)
  To: u-boot

On Wed, Jun 6, 2018 at 4:35 AM, Jun Nie <jun.nie@linaro.org> wrote:
> 2018-06-06 9:08 GMT+08:00 Teddy Reed <teddy.reed@gmail.com>:
>> When using verified-boot in the SPL, the FIT content must be
>> verified before it can be used.
>>
>> Currently the load_addr FIT property is read and used as input to
>> memcpy before the property is verified.
>>
>> Signed-off-by: Teddy Reed <teddy.reed@gmail.com>
>> ---
>
> Reviewed-by: Jun Nie <jun.nie@linaro.org>

Thanks for taking a look Jun! I did not see any sandbox tests
exercising the SPL/signature checking so I included 'RFC'. I know you
are familiar with using the signature checking within the SPL, and you
helped make it possible in the first place.

The three minor concerns I had when moving the validation earlier are:
(1) the signature was originally calculated on the potentially
uncompressed version, but this seems unlikely; similarly (2) the post
process board-specific methods can mutate the signed content; and (3)
now using the src address means reading directly from storage / etc
instead of potentially SRAM/DRAM.

For (1) see that line 256 was uncompressing the data before signature
checking. Then the signature check was applied to the uncompressed
region. To be clear I think this patch is the correct approach, and
the signature check should apply to the compressed content.

For (2) see that line 248 is board-specific, I am assuming that can
mutate the content. Thus the signature check should be placed before
that call.

Thanks again!

-- 
Teddy Reed V

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-06 15:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-06  1:08 [U-Boot] [RFC][PATCH] spl: vboot: Verify content before using load_addr Teddy Reed
2018-06-06  8:35 ` Jun Nie
2018-06-06 15:32   ` Teddy Reed

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox