Re: [U-Boot] [PATCH v3 3/7] SECURE_BOOT: split the secure boot functionality in two parts

2016-01-27 Thread york sun
On 01/22/2016 03:10 AM, Aneesh Bansal wrote:
> There are two phases in Secure Boot
> 1. ISBC: In BootROM, validate the BootLoader (U-Boot).
> 2. ESBC: In U-Boot, continuing the Chain of Trust by
>  validating and booting LINUX.
> 
> For ESBC phase, there is no difference in SoC's based on ARM or PowerPC
> cores.
> 
> But the exit conditions after ISBC phase i.e. entry conditions for
> U-Boot are different for ARM and PowerPC.
> PowerPC:
> 
> If Secure Boot is executed, a separate U-Boot target is required which
> must be compiled with a diffrent Text Base as compared to Non-Secure Boot.
> There are some LAW and TLB settings which are required specifically for
> Secure Boot scenario.
> 
> ARM:
> 
> ARM based SoC's have a fixed memory map and exit conditions from BootROM
> are same irrespective of boot mode (Secure or Non-Secure).
> 
> Thus the current Secure Boot functionlity has been split into two parts:
> 
> CONFIG_CHAIN_OF_TRUST
> 
> This will have the following functionality as part of U-Boot:
> 1. Enable commands like esbc_validate, esbc_halt
> 2. Change the environment settings based on bootmode (determined at run time):
>  - If bootmode is non-secure, no change
>  - If bootmode is secure, set the following:
>  - bootdelay = 0 (Don't give boot prompt)
>  - bootcmd = Validate and execute the bootscript.
> 
> CONFIG_SECURE_BOOT
> =
> This is defined only for creating a different compile time target for secure 
> boot.
> 
> Traditionally, both these functionalities were defined under 
> CONFIG_SECURE_BOOT
> This patch is aimed at removing the requirement for a separate Secure Boot 
> target
> for ARM based SoC's. CONFIG_CHAIN_OF_TRUST will be defined and boot mode will 
> be
> determine at run time.
> 
> Another Security Requirement for running CHAIN_OF_TRUST is that U-Boot 
> environemnt
> must not be picked from flash/external memory. This cannot be done based on 
> bootmode
> at run time in current U-Boot architecture. Once this dependency is resolved, 
> no separate
> SECURE_BOOT target will be required for ARM based SoC's.
> 
> Currently, the only code under CONFIG_SECURE_BOOT for ARM SoC's is defining
> CONFIG_ENV_IS_NOWHERE
> 
> Signed-off-by: Aneesh Bansal 
> ---
> Changes in v3:
> None
> 
> Changes in v2:
> CONFIG_ENV_IS_NOWHERE is defined for Secure Boot
> 
>  arch/arm/include/asm/fsl_secure_boot.h |  16 ++--
>  arch/powerpc/include/asm/fsl_secure_boot.h |  41 +-
>  include/config_fsl_chain_trust.h   | 101 +
>  include/config_fsl_secboot.h   | 116 
> -
>  4 files changed, 135 insertions(+), 139 deletions(-)
>  create mode 100644 include/config_fsl_chain_trust.h
>  delete mode 100644 include/config_fsl_secboot.h
> 

Change subject prefix to "secure_boot:". Slightly reformat commit message.
Applied to u-boot-fsl-qoriq master. Awaiting upstream.

Thanks.

York

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3 3/7] SECURE_BOOT: split the secure boot functionality in two parts

2016-01-27 Thread Ruchika Gupta


> -Original Message-
> From: Aneesh Bansal [mailto:aneesh.ban...@nxp.com]
> Sent: Friday, January 22, 2016 4:37 PM
> To: u-boot@lists.denx.de
> Cc: york sun ; Ruchika Gupta
> ; Prabhakar Kushwaha
> ; Aneesh Bansal
> 
> Subject: [PATCH v3 3/7] SECURE_BOOT: split the secure boot functionality in
> two parts
> 
> There are two phases in Secure Boot
> 1. ISBC: In BootROM, validate the BootLoader (U-Boot).
> 2. ESBC: In U-Boot, continuing the Chain of Trust by
>  validating and booting LINUX.
> 
> For ESBC phase, there is no difference in SoC's based on ARM or PowerPC
> cores.
> 
> But the exit conditions after ISBC phase i.e. entry conditions for U-Boot are
> different for ARM and PowerPC.
> PowerPC:
> 
> If Secure Boot is executed, a separate U-Boot target is required which must
> be compiled with a diffrent Text Base as compared to Non-Secure Boot.
> There are some LAW and TLB settings which are required specifically for
> Secure Boot scenario.
> 
> ARM:
> 
> ARM based SoC's have a fixed memory map and exit conditions from
> BootROM are same irrespective of boot mode (Secure or Non-Secure).
> 
> Thus the current Secure Boot functionlity has been split into two parts:
> 
> CONFIG_CHAIN_OF_TRUST
> 
> This will have the following functionality as part of U-Boot:
> 1. Enable commands like esbc_validate, esbc_halt 2. Change the
> environment settings based on bootmode (determined at run time):
>  - If bootmode is non-secure, no change
>  - If bootmode is secure, set the following:
>  - bootdelay = 0 (Don't give boot prompt)
>  - bootcmd = Validate and execute the bootscript.
> 
> CONFIG_SECURE_BOOT
> =
> This is defined only for creating a different compile time target for secure
> boot.
> 
> Traditionally, both these functionalities were defined under
> CONFIG_SECURE_BOOT This patch is aimed at removing the requirement for
> a separate Secure Boot target for ARM based SoC's.
> CONFIG_CHAIN_OF_TRUST will be defined and boot mode will be determine
> at run time.
> 
> Another Security Requirement for running CHAIN_OF_TRUST is that U-Boot
> environemnt must not be picked from flash/external memory. This cannot
> be done based on bootmode at run time in current U-Boot architecture.
> Once this dependency is resolved, no separate SECURE_BOOT target will be
> required for ARM based SoC's.
> 
> Currently, the only code under CONFIG_SECURE_BOOT for ARM SoC's is
> defining CONFIG_ENV_IS_NOWHERE
> 
> Signed-off-by: Aneesh Bansal 
> ---
> Changes in v3:
> None
> 
> Changes in v2:
> CONFIG_ENV_IS_NOWHERE is defined for Secure Boot
> 
>  arch/arm/include/asm/fsl_secure_boot.h |  16 ++--
>  arch/powerpc/include/asm/fsl_secure_boot.h |  41 +-
>  include/config_fsl_chain_trust.h   | 101 +
>  include/config_fsl_secboot.h   | 116 
> -
>  4 files changed, 135 insertions(+), 139 deletions(-)  create mode 100644
> include/config_fsl_chain_trust.h  delete mode 100644
> include/config_fsl_secboot.h
> 
> diff --git a/arch/arm/include/asm/fsl_secure_boot.h
> b/arch/arm/include/asm/fsl_secure_boot.h
> index 8491a72..0da0599 100644
> --- a/arch/arm/include/asm/fsl_secure_boot.h
> +++ b/arch/arm/include/asm/fsl_secure_boot.h
> @@ -8,6 +8,14 @@
>  #define __FSL_SECURE_BOOT_H
> 
>  #ifdef CONFIG_SECURE_BOOT
> +
> +#ifndef CONFIG_FIT_SIGNATURE
> +#define CONFIG_CHAIN_OF_TRUST
> +#endif
> +
> +#endif
> +
> +#ifdef CONFIG_CHAIN_OF_TRUST
>  #define CONFIG_CMD_ESBC_VALIDATE
>  #define CONFIG_CMD_BLOB
>  #define CONFIG_FSL_SEC_MON
> @@ -40,8 +48,6 @@
>  #define CONFIG_ESBC_ADDR_64BIT
>  #endif
> 
> -#ifndef CONFIG_FIT_SIGNATURE
> -
>  #define CONFIG_EXTRA_ENV \
>   "setenv fdt_high 0xcfff;"   \
>   "setenv initrd_high 0xcfff;"\
> @@ -50,8 +56,6 @@
>  /* The address needs to be modified according to NOR memory map */
>  #define CONFIG_BOOTSCRIPT_HDR_ADDR   0x600a
> 
> -#include 
> -#endif
> -#endif
> -
> +#include 
> +#endif /* #ifdef CONFIG_CHAIN_OF_TRUST */
>  #endif
> diff --git a/arch/powerpc/include/asm/fsl_secure_boot.h
> b/arch/powerpc/include/asm/fsl_secure_boot.h
> index 7d217a6..41058d1 100644
> --- a/arch/powerpc/include/asm/fsl_secure_boot.h
> +++ b/arch/powerpc/include/asm/fsl_secure_boot.h
> @@ -9,19 +9,11 @@
>  #include 
> 
>  #ifdef CONFIG_SECURE_BOOT
> -#define CONFIG_CMD_ESBC_VALIDATE
> -#define CONFIG_CMD_BLOB
> -#define CONFIG_FSL_SEC_MON
> -#define CONFIG_SHA_PROG_HW_ACCEL
> -#define CONFIG_DM
> -#define CONFIG_RSA
> -#define CONFIG_RSA_FREESCALE_EXP
> -#ifndef CONFIG_FSL_CAAM
> -#define CONFIG_FSL_CAAM
> -#endif
> +
> +#ifndef CONFIG_FIT_SIGNATURE
> +#define CONFIG_CHAIN_OF_TRUST
>  #endif
> 
> -#ifdef CONFIG_SECURE_BOOT
>  #if defined(CONFIG_FSL_CORENET)
>  #define CONFIG_SYS_PBI_FLASH_BASE0xc000
>  #elif defined(CONFIG_BSC9132QDS)
> @@ -76,8 +68,25 @@
>   */
>  #define CONFIG_FSL_ISBC_KEY_EXT
>  #endif
>

[U-Boot] [PATCH v3 3/7] SECURE_BOOT: split the secure boot functionality in two parts

2016-01-22 Thread Aneesh Bansal
There are two phases in Secure Boot
1. ISBC: In BootROM, validate the BootLoader (U-Boot).
2. ESBC: In U-Boot, continuing the Chain of Trust by
 validating and booting LINUX.

For ESBC phase, there is no difference in SoC's based on ARM or PowerPC
cores.

But the exit conditions after ISBC phase i.e. entry conditions for
U-Boot are different for ARM and PowerPC.
PowerPC:

If Secure Boot is executed, a separate U-Boot target is required which
must be compiled with a diffrent Text Base as compared to Non-Secure Boot.
There are some LAW and TLB settings which are required specifically for
Secure Boot scenario.

ARM:

ARM based SoC's have a fixed memory map and exit conditions from BootROM
are same irrespective of boot mode (Secure or Non-Secure).

Thus the current Secure Boot functionlity has been split into two parts:

CONFIG_CHAIN_OF_TRUST

This will have the following functionality as part of U-Boot:
1. Enable commands like esbc_validate, esbc_halt
2. Change the environment settings based on bootmode (determined at run time):
 - If bootmode is non-secure, no change
 - If bootmode is secure, set the following:
 - bootdelay = 0 (Don't give boot prompt)
 - bootcmd = Validate and execute the bootscript.

CONFIG_SECURE_BOOT
=
This is defined only for creating a different compile time target for secure 
boot.

Traditionally, both these functionalities were defined under CONFIG_SECURE_BOOT
This patch is aimed at removing the requirement for a separate Secure Boot 
target
for ARM based SoC's. CONFIG_CHAIN_OF_TRUST will be defined and boot mode will be
determine at run time.

Another Security Requirement for running CHAIN_OF_TRUST is that U-Boot 
environemnt
must not be picked from flash/external memory. This cannot be done based on 
bootmode
at run time in current U-Boot architecture. Once this dependency is resolved, 
no separate
SECURE_BOOT target will be required for ARM based SoC's.

Currently, the only code under CONFIG_SECURE_BOOT for ARM SoC's is defining
CONFIG_ENV_IS_NOWHERE

Signed-off-by: Aneesh Bansal 
---
Changes in v3:
None

Changes in v2:
CONFIG_ENV_IS_NOWHERE is defined for Secure Boot

 arch/arm/include/asm/fsl_secure_boot.h |  16 ++--
 arch/powerpc/include/asm/fsl_secure_boot.h |  41 +-
 include/config_fsl_chain_trust.h   | 101 +
 include/config_fsl_secboot.h   | 116 -
 4 files changed, 135 insertions(+), 139 deletions(-)
 create mode 100644 include/config_fsl_chain_trust.h
 delete mode 100644 include/config_fsl_secboot.h

diff --git a/arch/arm/include/asm/fsl_secure_boot.h 
b/arch/arm/include/asm/fsl_secure_boot.h
index 8491a72..0da0599 100644
--- a/arch/arm/include/asm/fsl_secure_boot.h
+++ b/arch/arm/include/asm/fsl_secure_boot.h
@@ -8,6 +8,14 @@
 #define __FSL_SECURE_BOOT_H
 
 #ifdef CONFIG_SECURE_BOOT
+
+#ifndef CONFIG_FIT_SIGNATURE
+#define CONFIG_CHAIN_OF_TRUST
+#endif
+
+#endif
+
+#ifdef CONFIG_CHAIN_OF_TRUST
 #define CONFIG_CMD_ESBC_VALIDATE
 #define CONFIG_CMD_BLOB
 #define CONFIG_FSL_SEC_MON
@@ -40,8 +48,6 @@
 #define CONFIG_ESBC_ADDR_64BIT
 #endif
 
-#ifndef CONFIG_FIT_SIGNATURE
-
 #define CONFIG_EXTRA_ENV \
"setenv fdt_high 0xcfff;"   \
"setenv initrd_high 0xcfff;"\
@@ -50,8 +56,6 @@
 /* The address needs to be modified according to NOR memory map */
 #define CONFIG_BOOTSCRIPT_HDR_ADDR 0x600a
 
-#include 
-#endif
-#endif
-
+#include 
+#endif /* #ifdef CONFIG_CHAIN_OF_TRUST */
 #endif
diff --git a/arch/powerpc/include/asm/fsl_secure_boot.h 
b/arch/powerpc/include/asm/fsl_secure_boot.h
index 7d217a6..41058d1 100644
--- a/arch/powerpc/include/asm/fsl_secure_boot.h
+++ b/arch/powerpc/include/asm/fsl_secure_boot.h
@@ -9,19 +9,11 @@
 #include 
 
 #ifdef CONFIG_SECURE_BOOT
-#define CONFIG_CMD_ESBC_VALIDATE
-#define CONFIG_CMD_BLOB
-#define CONFIG_FSL_SEC_MON
-#define CONFIG_SHA_PROG_HW_ACCEL
-#define CONFIG_DM
-#define CONFIG_RSA
-#define CONFIG_RSA_FREESCALE_EXP
-#ifndef CONFIG_FSL_CAAM
-#define CONFIG_FSL_CAAM
-#endif
+
+#ifndef CONFIG_FIT_SIGNATURE
+#define CONFIG_CHAIN_OF_TRUST
 #endif
 
-#ifdef CONFIG_SECURE_BOOT
 #if defined(CONFIG_FSL_CORENET)
 #define CONFIG_SYS_PBI_FLASH_BASE  0xc000
 #elif defined(CONFIG_BSC9132QDS)
@@ -76,8 +68,25 @@
  */
 #define CONFIG_FSL_ISBC_KEY_EXT
 #endif
+#endif /* #ifdef CONFIG_SECURE_BOOT */
+
+#ifdef CONFIG_CHAIN_OF_TRUST
+
+#define CONFIG_CMD_ESBC_VALIDATE
+#define CONFIG_CMD_BLOB
+#define CONFIG_FSL_SEC_MON
+#define CONFIG_SHA_PROG_HW_ACCEL
+#define CONFIG_RSA
+#define CONFIG_RSA_FREESCALE_EXP
+
+#ifndef CONFIG_DM
+#define CONFIG_DM
+#endif
+
+#ifndef CONFIG_FSL_CAAM
+#define CONFIG_FSL_CAAM
+#endif
 
-#ifndef CONFIG_FIT_SIGNATURE
 /* If Boot Script is not on NOR and is required to be copied on RAM */
 #ifdef CONFIG_BOOTSCRIPT_COPY_RAM
 #define CONFIG_BS_HDR_ADDR_RAM 0x0001
@@ -105,10 +114,8 @@
 #define CONFIG_BOOT