Commit bcb79b90 authored by Sandrine Bailleux's avatar Sandrine Bailleux Committed by Dan Handley
Browse files

Panic if platform specific BL3-0 handling fails

The return value of bl2_plat_handle_bl30() used to be ignored.
This patch modifies the function load_bl30() so that it now
checks this return value and returns it to bl2_main().

This patch also unifies the error handling code across the
load_blx() functions so that they return a status code in all
cases and bl2_main() has the sole responsibility of panicking
if appropriate.

Change-Id: I2b26cdf65afa443b48c7da1fa7da8db956071bfb
parent 9c7eecce
...@@ -205,14 +205,16 @@ static int load_bl30(void) ...@@ -205,14 +205,16 @@ static int load_bl30(void)
&bl30_image_info, &bl30_image_info,
NULL); NULL);
if (e == 0) { if (e)
return e;
#if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT
e = auth_verify_obj(AUTH_BL30_IMG, e = auth_verify_obj(AUTH_BL30_IMG,
bl30_image_info.image_base, bl30_image_info.image_base,
bl30_image_info.image_size); bl30_image_info.image_size);
if (e) { if (e) {
ERROR("Failed to authenticate BL3-0 image.\n"); ERROR("Failed to authenticate BL3-0 image.\n");
panic(); return e;
} }
/* After working with data, invalidate the data cache */ /* After working with data, invalidate the data cache */
...@@ -221,7 +223,10 @@ static int load_bl30(void) ...@@ -221,7 +223,10 @@ static int load_bl30(void)
#endif /* TRUSTED_BOARD_BOOT */ #endif /* TRUSTED_BOARD_BOOT */
/* The subsequent handling of BL3-0 is platform specific */ /* The subsequent handling of BL3-0 is platform specific */
bl2_plat_handle_bl30(&bl30_image_info); e = bl2_plat_handle_bl30(&bl30_image_info);
if (e) {
ERROR("Failure in platform-specific handling of BL3-0 image.\n");
return e;
} }
#endif /* BL30_BASE */ #endif /* BL30_BASE */
...@@ -256,15 +261,16 @@ static int load_bl31(bl31_params_t *bl2_to_bl31_params, ...@@ -256,15 +261,16 @@ static int load_bl31(bl31_params_t *bl2_to_bl31_params,
BL31_BASE, BL31_BASE,
bl2_to_bl31_params->bl31_image_info, bl2_to_bl31_params->bl31_image_info,
bl31_ep_info); bl31_ep_info);
if (e)
return e;
if (e == 0) {
#if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT
e = auth_verify_obj(AUTH_BL31_IMG, e = auth_verify_obj(AUTH_BL31_IMG,
bl2_to_bl31_params->bl31_image_info->image_base, bl2_to_bl31_params->bl31_image_info->image_base,
bl2_to_bl31_params->bl31_image_info->image_size); bl2_to_bl31_params->bl31_image_info->image_size);
if (e) { if (e) {
ERROR("Failed to authenticate BL3-1 image.\n"); ERROR("Failed to authenticate BL3-1 image.\n");
panic(); return e;
} }
/* After working with data, invalidate the data cache */ /* After working with data, invalidate the data cache */
...@@ -274,7 +280,6 @@ static int load_bl31(bl31_params_t *bl2_to_bl31_params, ...@@ -274,7 +280,6 @@ static int load_bl31(bl31_params_t *bl2_to_bl31_params,
bl2_plat_set_bl31_ep_info(bl2_to_bl31_params->bl31_image_info, bl2_plat_set_bl31_ep_info(bl2_to_bl31_params->bl31_image_info,
bl31_ep_info); bl31_ep_info);
}
return e; return e;
} }
...@@ -309,12 +314,14 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params) ...@@ -309,12 +314,14 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params)
bl2_to_bl31_params->bl32_image_info, bl2_to_bl31_params->bl32_image_info,
bl2_to_bl31_params->bl32_ep_info); bl2_to_bl31_params->bl32_ep_info);
if (e == 0) { if (e)
return e;
#if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT
/* Image is present. Check if there is a valid certificate */ /* Image is present. Check if there is a valid certificate */
if (bl32_cert_error) { if (bl32_cert_error) {
ERROR("Failed to authenticate BL3-2 certificates.\n"); ERROR("Failed to authenticate BL3-2 certificates.\n");
panic(); return bl32_cert_error;
} }
e = auth_verify_obj(AUTH_BL32_IMG, e = auth_verify_obj(AUTH_BL32_IMG,
...@@ -322,7 +329,7 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params) ...@@ -322,7 +329,7 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params)
bl2_to_bl31_params->bl32_image_info->image_size); bl2_to_bl31_params->bl32_image_info->image_size);
if (e) { if (e) {
ERROR("Failed to authenticate BL3-2 image.\n"); ERROR("Failed to authenticate BL3-2 image.\n");
panic(); return e;
} }
/* After working with data, invalidate the data cache */ /* After working with data, invalidate the data cache */
inv_dcache_range(bl2_to_bl31_params->bl32_image_info->image_base, inv_dcache_range(bl2_to_bl31_params->bl32_image_info->image_base,
...@@ -332,7 +339,6 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params) ...@@ -332,7 +339,6 @@ static int load_bl32(bl31_params_t *bl2_to_bl31_params)
bl2_plat_set_bl32_ep_info( bl2_plat_set_bl32_ep_info(
bl2_to_bl31_params->bl32_image_info, bl2_to_bl31_params->bl32_image_info,
bl2_to_bl31_params->bl32_ep_info); bl2_to_bl31_params->bl32_ep_info);
}
#endif /* BL32_BASE */ #endif /* BL32_BASE */
return e; return e;
...@@ -361,14 +367,16 @@ static int load_bl33(bl31_params_t *bl2_to_bl31_params) ...@@ -361,14 +367,16 @@ static int load_bl33(bl31_params_t *bl2_to_bl31_params)
bl2_to_bl31_params->bl33_image_info, bl2_to_bl31_params->bl33_image_info,
bl2_to_bl31_params->bl33_ep_info); bl2_to_bl31_params->bl33_ep_info);
if (e == 0) { if (e)
return e;
#if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT
e = auth_verify_obj(AUTH_BL33_IMG, e = auth_verify_obj(AUTH_BL33_IMG,
bl2_to_bl31_params->bl33_image_info->image_base, bl2_to_bl31_params->bl33_image_info->image_base,
bl2_to_bl31_params->bl33_image_info->image_size); bl2_to_bl31_params->bl33_image_info->image_size);
if (e) { if (e) {
ERROR("Failed to authenticate BL3-3 image.\n"); ERROR("Failed to authenticate BL3-3 image.\n");
panic(); return e;
} }
/* After working with data, invalidate the data cache */ /* After working with data, invalidate the data cache */
inv_dcache_range(bl2_to_bl31_params->bl33_image_info->image_base, inv_dcache_range(bl2_to_bl31_params->bl33_image_info->image_base,
...@@ -377,7 +385,6 @@ static int load_bl33(bl31_params_t *bl2_to_bl31_params) ...@@ -377,7 +385,6 @@ static int load_bl33(bl31_params_t *bl2_to_bl31_params)
bl2_plat_set_bl33_ep_info(bl2_to_bl31_params->bl33_image_info, bl2_plat_set_bl33_ep_info(bl2_to_bl31_params->bl33_image_info,
bl2_to_bl31_params->bl33_ep_info); bl2_to_bl31_params->bl33_ep_info);
}
return e; return e;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment