Skip to contentSkip to conversation

Add bootscript support to esbc_validate.

PATCH New Gaurav Rana 4 participants 9 messages Mar 10, 2015 – Apr 23, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

---
 arch/arm/include/asm/fsl_secure_boot.h     | 25 +++++++++
 arch/powerpc/include/asm/fsl_secure_boot.h | 19 +++++++
 board/freescale/common/cmd_esbc_validate.c | 16 ++++++
 include/config_fsl_secboot.h               | 89 ++++++++++++++++++++++++++++++
 include/configs/ls1021aqds.h               |  1 +
 5 files changed, 150 insertions(+)
 create mode 100644 arch/arm/include/asm/fsl_secure_boot.h
 create mode 100644 include/config_fsl_secboot.h
arch/arm/include/asm/fsl_secure_boot.h new file +25 -0
new file mode 100644
index 0000000..f097c81
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __FSL_SECURE_BOOT_H
+#define __FSL_SECURE_BOOT_H
+
+#ifdef CONFIG_SECURE_BOOT
+#ifndef CONFIG_FIT_SIGNATURE
+
+#define CONFIG_EXTRA_ENV \
+	"setenv fdt_high 0xcfffffff;"	\
+	"setenv initrd_high 0xcfffffff;"	\
+	"setenv hwconfig \'fsl_ddr:ctlr_intlv=null,bank_intlv=null\';"
+
+/* The address needs to be modified according to NOR memory map */
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0x600a0000
+
+#include <config_fsl_secboot.h>
+#endif
+#endif
+
+#endif
arch/powerpc/include/asm/fsl_secure_boot.h +19 -0
index 49f6814..8f794ef 100644
@@ -67,5 +67,24 @@
 #define CONFIG_FSL_ISBC_KEY_EXT
 #endif
 
+#ifndef CONFIG_FIT_SIGNATURE
+/* The bootscript header address is different for B4860 because the NOR
+ * mapping is different on B4 due to reduced NOR size.
+ */
+#if defined(CONFIG_B4860QDS)
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0xecc00000
+#elif defined(CONFIG_FSL_CORENET)
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0xe8e00000
+#elif defined(CONFIG_BSC9132QDS)
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0x88020000
+#elif defined(CONFIG_C29XPCIE)
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0xec020000
+#else
+#define CONFIG_BOOTSCRIPT_HDR_ADDR	0xee020000
+#endif
+
+#include <config_fsl_secboot.h>
+#endif
+
 #endif
 #endif
board/freescale/common/cmd_esbc_validate.c +16 -0
index 8500ba5..8bbe85b 100644
@@ -8,6 +8,16 @@
 #include <command.h>
 #include <fsl_validate.h>
 
+static int do_esbc_halt(cmd_tbl_t *cmdtp, int flag, int argc,
+				char * const argv[])
+{
+	printf("Core is entering spin loop.\n");
+loop:
+	goto loop;
+
+	return 0;
+}
+
 static int do_esbc_validate(cmd_tbl_t *cmdtp, int flag, int argc,
 				char * const argv[])
 {
@@ -32,3 +42,9 @@ U_BOOT_CMD(
 	"Validates signature on a given image using RSA verification",
 	esbc_validate_help_text
 );
+
+U_BOOT_CMD(
+	esbc_halt,	1,	0,	do_esbc_halt,
+	"Put the core in spin loop ",
+	""
+);
include/config_fsl_secboot.h new file +89 -0

89 lines not on this page · raw message

include/configs/ls1021aqds.h +1 -0
index 3dc4da3..ea7eb8a 100644
@@ -656,6 +656,7 @@ unsigned long get_board_ddr_clk(void);
 
 #ifdef CONFIG_SECURE_BOOT
 #define CONFIG_CMD_BLOB
+#include <asm/fsl_secure_boot.h>
 #endif
 
 #endif
Signature · 1 line
1.8.1.4
#1 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Quoted 10 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \
Quoted 8 lines

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

York

#2 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 9 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \
Quoted 8 lines

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image. For secure chain of trust, only validated bootscript should be allowed to execute and be responsible for passing control to next level image.

Ruchika

Quoted 2 lines

York

#3 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Quoted 29 lines · On 03/10/2015 09:25 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 17 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 5 lines
Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image. For secure chain of trust, only validated bootscript should be allowed to execute and be responsible for passing control to next level image.

Ruchika,

Do you expect secure boot to run automatically once u-boot reaches the prompt and the "source $img_addr" to actually boot the OS? You put "esbc_halt" as a fall-back to catch failure above? It doesn't sounds very secure to me.

I am hoping other reviewers can chime in and give comments.

York

#4 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Hi York,

Quoted 45 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 10:03 PM
To: Gupta Ruchika-R66431; Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 29 lines · On 03/10/2015 09:25 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 17 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 3 lines
Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then

pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image.

Quoted 1 line

For secure chain of trust, only validated bootscript should be allowed to

Quoted 8 lines

execute and be responsible for passing control to next level image.

Quoted 1 line

Ruchika,

Do you expect secure boot to run automatically once u-boot reaches the prompt and the "source $img_addr" to actually boot the OS? You put "esbc_halt" as a fall-back to catch failure above? It doesn't sounds very secure to me.

The bootscript is first validated. Only an authenticated user, who has the private key can sign the bootscript. Thus validating bootscript is important in secure boot chain of trust.

You are right regarding fallback as esbc_halt. In the esbc_halt implementation, we will add code to clear security secrets on the chip, and issue a reset. We will send a separate patch for that.

Ruchika

Quoted 4 lines

I am hoping other reviewers can chime in and give comments.

York

#5 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Quoted 52 lines · On 03/11/2015 03:39 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 50 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 10:03 PM
To: Gupta Ruchika-R66431; Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 29 lines · On 03/10/2015 09:25 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 17 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 3 lines
Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then

pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image.

Quoted 1 line

For secure chain of trust, only validated bootscript should be allowed to

execute and be responsible for passing control to next level image.

Quoted 1 line

Ruchika,

Quoted 8 lines
Quoted 3 lines

Do you expect secure boot to run automatically once u-boot reaches the prompt and the "source $img_addr" to actually boot the OS? You put "esbc_halt" as a fall-back to catch failure above? It doesn't sounds very secure to me.

The bootscript is first validated. Only an authenticated user, who has the private key can sign the bootscript. Thus validating bootscript is important in secure boot chain of trust.

You are right regarding fallback as esbc_halt. In the esbc_halt implementation, we will add code to clear security secrets on the chip, and issue a reset. We will send a separate patch for that.

Wouldn't it be possible to call a reset/hang/panic when the validation fails, before "source $img_addr"?

York

#6 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Quoted 58 lines · York Sun
Quoted 56 lines · On 03/11/2015 03:39 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 53 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 10:03 PM
To: Gupta Ruchika-R66431; Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 29 lines · On 03/10/2015 09:25 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 17 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 3 lines
Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then

pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image.

Quoted 1 line

For secure chain of trust, only validated bootscript should be allowed to

execute and be responsible for passing control to next level image.

Quoted 1 line

Ruchika,

Do you expect secure boot to run automatically once u-boot reaches the prompt and the "source $img_addr" to actually boot the OS? You put "esbc_halt" as a fall-back to catch failure above? It doesn't sounds very secure to me.

Quoted 7 lines
Quoted 4 lines

The bootscript is first validated. Only an authenticated user, who has the private key can sign the bootscript. Thus validating bootscript is important in secure boot chain of trust.

You are right regarding fallback as esbc_halt. In the esbc_halt implementation, we will add code to clear security secrets on the chip, and issue a reset. We will send a separate patch for that.

Wouldn't it be possible to call a reset/hang/panic when the validation fails, before "source $img_addr"?

I'd assume it already has that, but it's still good to have something to deal with the case where the script returns due to some failure.

-Scott

#7 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

Quoted 61 lines · Scott Wood
Quoted 60 lines · York Sun
Quoted 58 lines · On 03/11/2015 03:39 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 45 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 10:03 PM
To: Gupta Ruchika-R66431; Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 29 lines · On 03/10/2015 09:25 AM, Gupta Ruchika-R66431 wrote:

Hi York,

Quoted 27 lines

-----Original Message-----
From: Sun York-R58495
Sent: Tuesday, March 10, 2015 9:45 PM
To: Rana Gaurav-B46163; u-boot at lists.denx.de
Cc: Wood Scott-B07421; Gupta Ruchika-R66431; Bansal Aneesh-B39320
Subject: Re: [PATCH] Add bootscript support to esbc_validate.

Quoted 17 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run
the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 3 lines
Quoted 2 lines

What's the purpose of "esbc_halt"? Once it enters the spin, how to get it out?

The purpose of bootscript is to validate the next level images and then

pass control to it, so bootscript must contain a bootm command. We don't expect control to return back to u-boot. Hence a command esbc_halt is introduced which would make the core spin and not provide uboot prompt in case bootscript doesn't pass control to next level image.

Quoted 1 line

For secure chain of trust, only validated bootscript should be allowed to

Quoted 8 lines

execute and be responsible for passing control to next level image.

Quoted 1 line

Ruchika,

Do you expect secure boot to run automatically once u-boot reaches the prompt and the "source $img_addr" to actually boot the OS? You put "esbc_halt" as a fall-back to catch failure above? It doesn't sounds very secure to me.

The bootscript is first validated. Only an authenticated user, who has the private key can sign the bootscript. Thus validating bootscript is important in secure boot chain of trust.

Quoted 9 lines
Quoted 5 lines
Quoted 2 lines

You are right regarding fallback as esbc_halt. In the esbc_halt implementation, we will add code to clear security secrets on the chip, and issue a reset. We will send a separate patch for that.

Wouldn't it be possible to call a reset/hang/panic when the validation fails, before "source $img_addr"?

I'd assume it already has that, but it's still good to have something to deal with the case where the script returns due to some failure.

If that's the case, I am OK with the addition of "esbc_halt" command.

York

Applied
#8 lore raw

PATCH 1/1 Add bootscript support to esbc_validate.

In reply to Gaurav Rana
Quoted 18 lines · Gaurav Rana

1. Default environment will be used for secure boot flow which can't be edited or saved.
2. Command for secure boot is predefined in the default environment which will run on autoboot (and autoboot is the only option allowed in case of secure boot) and it looks like this:
#define CONFIG_SECBOOT \

 "setenv bs_hdraddr 0xe8e00000;"                 \
 "esbc_validate $bs_hdraddr;"                    \
 "source $img_addr;"                             \

"esbc_halt;"
#endif
3. Boot Script can contain esbc_validate commands and bootm command. Uboot source command used in default secure boot command will run the bootscript.
4. Command esbc_halt added to ensure either bootm executes after validation of images or core should just spin.

Quoted 3 lines

---

Applied to fsl-qoriq master, awaiting upstream.

York