[PATCH] arm: mach-k3: security: separate out validating binary logic

Manorit Chawdhry m-chawdhry at ti.com
Mon May 22 07:47:25 CEST 2023


Hi Tom,

On 18/05/23 12:44, Manorit Chawdhry wrote:
> K3 GP devices allows booting the secure binaries on them by bypassing
> the x509 header on them.
>
> ATF and OPTEE firewalling required the rproc_load to be called before
> authentication. This change caused the failure for GP devices that
> strips off the headers. The boot vector had been set before the headers
> were stripped off causing the runtime stripping to fail and stripping
> becoming in-effective.
>
> Separate out the secure binary check on GP/HS devices so that the
> boot_vector could be stripped before calling rproc_load. This allows
> keeping the authentication later when the cluster is on along with
> allowing the stripping of the binaries in case of gp devices.
>
> Fixes: 1e00e9be62e5 ("arm: mach-k3: common: re-locate authentication for atf/optee")
>
> Signed-off-by: Manorit Chawdhry <m-chawdhry at ti.com>
> ---
>   arch/arm/mach-k3/common.c   |  5 +++++
>   arch/arm/mach-k3/common.h   |  1 +
>   arch/arm/mach-k3/security.c | 32 ++++++++++++++++++++++++--------
>   3 files changed, 30 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
> index 3c85caee579d..34737a43aa08 100644
> --- a/arch/arm/mach-k3/common.c
> +++ b/arch/arm/mach-k3/common.c
> @@ -347,8 +347,13 @@ void board_fit_image_post_process(const void *fit, int node, void **p_image,
>   	if ((i != IMAGE_ID_ATF) && (i != IMAGE_ID_OPTEE))
>   #endif
>   	{
> +		ti_secure_image_check_binary(p_image, p_size);
>   		ti_secure_image_post_process(p_image, p_size);
>   	}
> +#if IS_ENABLED(CONFIG_SYS_K3_SPL_ATF)
> +	else
> +		ti_secure_image_check_binary(p_image, p_size);
> +#endif
>   }
>   #endif
>   
> diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
> index e7e59f533b70..899be64a50cb 100644
> --- a/arch/arm/mach-k3/common.h
> +++ b/arch/arm/mach-k3/common.h
> @@ -41,3 +41,4 @@ enum k3_device_type get_device_type(void);
>   void ti_secure_image_post_process(void **p_image, size_t *p_size);
>   struct ti_sci_handle *get_ti_sci_handle(void);
>   void do_board_detect(void);
> +void ti_secure_image_check_binary(void **p_image, size_t *p_size);
> diff --git a/arch/arm/mach-k3/security.c b/arch/arm/mach-k3/security.c
> index 6179f7373aa7..02a2c12dbd6f 100644
> --- a/arch/arm/mach-k3/security.c
> +++ b/arch/arm/mach-k3/security.c
> @@ -38,19 +38,16 @@ static size_t ti_secure_cert_length(void *p_image)
>   	return seq_length + 4;
>   }
>   
> -void ti_secure_image_post_process(void **p_image, size_t *p_size)
> +void ti_secure_image_check_binary(void **p_image, size_t *p_size)
>   {
> -	struct ti_sci_handle *ti_sci = get_ti_sci_handle();
> -	struct ti_sci_proc_ops *proc_ops = &ti_sci->ops.proc_ops;
> -	size_t cert_length;
> -	u64 image_addr;
>   	u32 image_size;
> -	int ret;
> -
> +	size_t cert_length;
>   	image_size = *p_size;
>   
> -	if (!image_size)
> +	if (!image_size) {
> +		debug("%s: Image size is %d\n", __func__, image_size);
>   		return;
> +	}
>   
>   	if (get_device_type() == K3_DEVICE_TYPE_GP) {
>   		if (ti_secure_cert_detected(*p_image)) {
> @@ -78,6 +75,25 @@ void ti_secure_image_post_process(void **p_image, size_t *p_size)
>   		       "This will fail on Security Enforcing(HS-SE) devices\n");
>   		return;
>   	}
> +}
> +
> +void ti_secure_image_post_process(void **p_image, size_t *p_size)
> +{
> +	struct ti_sci_handle *ti_sci = get_ti_sci_handle();
> +	struct ti_sci_proc_ops *proc_ops = &ti_sci->ops.proc_ops;
> +	u64 image_addr;
> +	u32 image_size;
> +	int ret;
> +
> +	image_size = *p_size;
> +	if (!image_size) {
> +		debug("%s: Image size is %d\n", __func__, image_size);
> +		return;
> +	}
> +
> +	if (get_device_type() != K3_DEVICE_TYPE_HS_SE &&
> +	    get_device_type() != K3_DEVICE_TYPE_HS_FS)
> +		return;
>   
>   	/* Clean out image so it can be seen by system firmware */
>   	image_addr = dma_map_single(*p_image, *p_size, DMA_BIDIRECTIONAL);
>
> ---
> base-commit: 0a9a4384c1483a88776bca38e28f09be51161034
> change-id: 20230512-b4-upstream-atf-optee-am62-gp-20bfcb479ac4
>
> Best regards,

Please hold this patch.

Regards,

Manorit



More information about the U-Boot mailing list