summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorJeffrey Kardatzke <jkardatzke@google.com>2023-02-09 11:03:17 -0800
committerJeffrey Kardatzke <jkardatzke@google.com>2023-02-09 13:27:36 -0800
commit8d7c80fa4c5ab17e25d6d82ff0b1e67795e903fb (patch)
tree1eae9f1dc8d01151be11c8940dfc1d8261417ffb /services
parent6264643a0711faef346cbbb6e3d928a198aeaf31 (diff)
downloadarm-trusted-firmware-8d7c80fa4c5ab17e25d6d82ff0b1e67795e903fb.tar.gz
fix(optee): address late comments and fix bad rc
There were some late comments to the prior change (18635) which are address in this commit. There was also an invalid return value check which was changed and the wrong result was being returned via the SMC call for loading OP-TEE which is now fixed. Signed-off-by: Jeffrey Kardatzke <jkardatzke@google.com> Change-Id: I883ddf966662549a3ef9c801a2d4f47709422332
Diffstat (limited to 'services')
-rw-r--r--services/spd/opteed/opteed_main.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/services/spd/opteed/opteed_main.c b/services/spd/opteed/opteed_main.c
index ff2aee0c5..ff09e7e0f 100644
--- a/services/spd/opteed/opteed_main.c
+++ b/services/spd/opteed/opteed_main.c
@@ -168,7 +168,8 @@ static int32_t opteed_setup(void)
* used. It also assumes that a valid non-secure context has been
* initialised by PSCI so it does not need to save and restore any
* non-secure state. This function performs a synchronous entry into
- * OPTEE. OPTEE passes control back to this routine through a SMC.
+ * OPTEE. OPTEE passes control back to this routine through a SMC. This returns
+ * a non-zero value on success and zero on failure.
******************************************************************************/
static int32_t
opteed_init_with_entry_point(entry_point_info_t *optee_entry_point)
@@ -232,6 +233,10 @@ static int32_t opteed_handle_smc_load(uint64_t data_size, uint32_t data_pa)
mapped_data_va = mapped_data_pa;
data_map_size = page_align(data_size + (mapped_data_pa - data_pa), UP);
+ /*
+ * We do not validate the passed in address because we are trusting the
+ * non-secure world at this point still.
+ */
rc = mmap_add_dynamic_region(mapped_data_pa, mapped_data_va,
data_map_size, MT_MEMORY | MT_RO | MT_NS);
if (rc != 0) {
@@ -290,7 +295,9 @@ static int32_t opteed_handle_smc_load(uint64_t data_size, uint32_t data_pa)
0,
0,
&opteed_sp_context[linear_id]);
- rc = opteed_init_with_entry_point(&optee_ep_info);
+ if (opteed_init_with_entry_point(&optee_ep_info) == 0) {
+ rc = -EFAULT;
+ }
/* Restore non-secure state */
cm_el1_sysregs_context_restore(NON_SECURE);