From b84a850864c05fef587fcbb301f955428966de64 Mon Sep 17 00:00:00 2001 From: Etienne Carriere Date: Mon, 15 Apr 2019 18:01:29 +0200 Subject: [PATCH] feat(lib/optee): introduce optee_header_is_valid() This new function optee_header_is_valid() allows platform to know whether OP-TEE OS is loaded from multi-image (using OP-TEE header image as BL32_IMAGE_ID) or from a single OP-TEE binary image. The function tee_validate_header() is reworked to return a boolean, and is now silent. Change-Id: Idc7dde091f2ada8898f40d02e68c3834ca39d8e8 Signed-off-by: Etienne Carriere Signed-off-by: Yann Gautier --- include/lib/optee_utils.h | 6 +++++- lib/optee/optee_utils.c | 21 ++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/lib/optee_utils.h b/include/lib/optee_utils.h index 6067caff4..06378ebbd 100644 --- a/include/lib/optee_utils.h +++ b/include/lib/optee_utils.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -7,8 +7,12 @@ #ifndef OPTEE_UTILS_H #define OPTEE_UTILS_H +#include + #include +bool optee_header_is_valid(uintptr_t header_base); + int parse_optee_header(entry_point_info_t *header_ep, image_info_t *pager_image_info, image_info_t *paged_image_info); diff --git a/lib/optee/optee_utils.c b/lib/optee/optee_utils.c index 0ad108242..d090b3826 100644 --- a/lib/optee/optee_utils.c +++ b/lib/optee/optee_utils.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -47,25 +47,24 @@ typedef struct optee_header { /******************************************************************************* * Check if it is a valid tee header - * Return 1 if valid - * Return 0 if invalid + * Return true if valid + * Return false if invalid ******************************************************************************/ -static inline int tee_validate_header(optee_header_t *header) +static bool tee_validate_header(optee_header_t *header) { - int valid = 0; - if ((header->magic == TEE_MAGIC_NUM_OPTEE) && (header->version == 2u) && (header->nb_images > 0u) && (header->nb_images <= OPTEE_MAX_NUM_IMAGES)) { - valid = 1; + return true; } - else { - WARN("Not a known TEE, use default loading options.\n"); - } + return false; +} - return valid; +bool optee_header_is_valid(uintptr_t header_base) +{ + return tee_validate_header((optee_header_t *)header_base); } /*******************************************************************************