aboutsummaryrefslogtreecommitdiff
path: root/ldelf
diff options
context:
space:
mode:
authorBalint Dobszay <balint.dobszay@arm.com>2020-12-11 16:25:47 +0100
committerJérôme Forissier <jerome@forissier.org>2021-01-05 17:56:19 +0100
commitbaa5161d50da0b430760fa9e2180496c2806f839 (patch)
treeaf0751444c45a46857c241b9044dac8a6ae1941e /ldelf
parent988ea29c4666687dcc038a35efd6412567be57bf (diff)
core: ldelf: implement separate syscalls for ldelf
Implements a separate syscall handler for ldelf to decouple it from user TAs and enable using it for all TSs. The calling convention is the same as for utee_* syscalls. To distinguish between the different SVCs, the syscall handler pointer is updated before entering ldelf and restored after returning. The step of opening a system PTA session and invoking the commands there is eliminated, the necessary functionality is implemented in the ldelf syscall functions. Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Balint Dobszay <balint.dobszay@arm.com>
Diffstat (limited to 'ldelf')
-rw-r--r--ldelf/include/ldelf.h23
-rw-r--r--ldelf/include/ldelf_syscalls.h33
-rw-r--r--ldelf/start_a32.S5
-rw-r--r--ldelf/start_a64.S5
-rw-r--r--ldelf/sub.mk2
-rw-r--r--ldelf/sys.c182
-rw-r--r--ldelf/sys.h6
-rw-r--r--ldelf/syscalls_a32.S51
-rw-r--r--ldelf/syscalls_a64.S31
-rw-r--r--ldelf/syscalls_asm.S20
-rw-r--r--ldelf/ta_elf.c21
11 files changed, 198 insertions, 181 deletions
diff --git a/ldelf/include/ldelf.h b/ldelf/include/ldelf.h
index d43d7445..e5977fdf 100644
--- a/ldelf/include/ldelf.h
+++ b/ldelf/include/ldelf.h
@@ -1,11 +1,13 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
#ifndef __LDELF_H
#define __LDELF_H
+#ifndef __ASSEMBLER__
#include <types_ext.h>
#include <tee_api_types.h>
#include <user_ta_header.h>
@@ -100,6 +102,27 @@ struct dl_entry_arg {
#define RTLD_GLOBAL 0x100
#define RTLD_NODELETE 0x1000
+#define LDELF_MAP_FLAG_SHAREABLE BIT32(0)
+#define LDELF_MAP_FLAG_WRITEABLE BIT32(1)
+#define LDELF_MAP_FLAG_EXECUTABLE BIT32(2)
+
+#endif /*!__ASSEMBLER__*/
+
+#define LDELF_RETURN 0
+#define LDELF_LOG 1
+#define LDELF_PANIC 2
+#define LDELF_MAP_ZI 3
+#define LDELF_UNMAP 4
+#define LDELF_OPEN_BIN 5
+#define LDELF_CLOSE_BIN 6
+#define LDELF_MAP_BIN 7
+#define LDELF_CP_FROM_BIN 8
+#define LDELF_SET_PROT 9
+#define LDELF_REMAP 10
+#define LDELF_GEN_RND_NUM 11
+
+#define LDELF_SCN_MAX 11
+
/*
* ldelf is loaded into memory by TEE Core. BSS is initialized and a
* stack is allocated and supplied in SP register. A struct ldelf_arg
diff --git a/ldelf/include/ldelf_syscalls.h b/ldelf/include/ldelf_syscalls.h
new file mode 100644
index 00000000..785f1637
--- /dev/null
+++ b/ldelf/include/ldelf_syscalls.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited
+ */
+
+#ifndef LDELF_SYSCALLS_H
+#define LDELF_SYSCALLS_H
+
+#include <stdint.h>
+#include <tee_api_types.h>
+#include <types_ext.h>
+
+void _ldelf_return(unsigned long ret) __noreturn;
+void _ldelf_log(const void *buf, size_t len);
+void _ldelf_panic(unsigned long code);
+TEE_Result _ldelf_map_zi(vaddr_t *va, size_t num_bytes, size_t pad_begin,
+ size_t pad_end, unsigned long flags);
+TEE_Result _ldelf_unmap(vaddr_t va, size_t num_bytes);
+TEE_Result _ldelf_open_bin(const TEE_UUID *uuid, size_t uuid_size,
+ uint32_t *handle);
+TEE_Result _ldelf_close_bin(unsigned long handle);
+TEE_Result _ldelf_map_bin(vaddr_t *va, size_t num_bytes, unsigned long handle,
+ size_t offs, size_t pad_begin, size_t pad_end,
+ unsigned long flags);
+TEE_Result _ldelf_cp_from_bin(void *dst, size_t offs, size_t num_bytes,
+ unsigned long handle);
+TEE_Result _ldelf_set_prot(unsigned long va, size_t num_bytes,
+ unsigned long flags);
+TEE_Result _ldelf_remap(unsigned long old_va, vaddr_t *new_va, size_t num_bytes,
+ size_t pad_begin, size_t pad_end);
+TEE_Result _ldelf_gen_rnd_num(void *buf, size_t num_bytes);
+
+#endif /* LDELF_SYSCALLS_H */
diff --git a/ldelf/start_a32.S b/ldelf/start_a32.S
index fe14bf79..70aa31ea 100644
--- a/ldelf/start_a32.S
+++ b/ldelf/start_a32.S
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
#include <asm.S>
@@ -48,9 +49,9 @@ FUNC _ldelf_start , :
2: bl ldelf
mov r0, #0
- bl _utee_return
+ bl _ldelf_return
3: mov r0, #0
- bl _utee_panic
+ bl _ldelf_panic
reloc_begin_rel:
.word __reloc_begin - reloc_begin_rel
reloc_end_rel:
diff --git a/ldelf/start_a64.S b/ldelf/start_a64.S
index 29df02a6..319d2c3f 100644
--- a/ldelf/start_a64.S
+++ b/ldelf/start_a64.S
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
#include <asm.S>
@@ -51,9 +52,9 @@ FUNC _ldelf_start , :
2: bl ldelf
mov x0, #0
- bl _utee_return
+ bl _ldelf_return
3: mov x0, #0
- bl _utee_panic
+ bl _ldelf_panic
reloc_begin_rel:
.word __reloc_begin - reloc_begin_rel
reloc_end_rel:
diff --git a/ldelf/sub.mk b/ldelf/sub.mk
index 76220706..13ae4ab4 100644
--- a/ldelf/sub.mk
+++ b/ldelf/sub.mk
@@ -1,6 +1,8 @@
global-incdirs-y += include
srcs-$(CFG_ARM32_$(sm)) += start_a32.S
srcs-$(CFG_ARM64_$(sm)) += start_a64.S
+srcs-$(CFG_ARM32_$(sm)) += syscalls_a32.S
+srcs-$(CFG_ARM64_$(sm)) += syscalls_a64.S
srcs-$(CFG_ARM64_$(sm)) += tlsdesc_rel_a64.S
srcs-y += dl.c
srcs-y += main.c
diff --git a/ldelf/sys.c b/ldelf/sys.c
index ff49d128..2017d934 100644
--- a/ldelf/sys.c
+++ b/ldelf/sys.c
@@ -1,19 +1,17 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
+#include <ldelf.h>
#include <trace.h>
-#include <utee_syscalls.h>
-#include <pta_system.h>
#include "sys.h"
int trace_level = TRACE_LEVEL;
const char trace_ext_prefix[] = "LD";
-static uint32_t sess;
-
void __panic(const char *file __maybe_unused, const int line __maybe_unused,
const char *func __maybe_unused)
{
@@ -24,7 +22,7 @@ void __panic(const char *file __maybe_unused, const int line __maybe_unused,
file ? file : "?", file ? line : 0,
func ? "<" : "", func ? func : "", func ? ">" : "");
- _utee_panic(1);
+ _ldelf_panic(1);
/*NOTREACHED*/
while (true)
;
@@ -32,204 +30,60 @@ void __panic(const char *file __maybe_unused, const int line __maybe_unused,
void sys_return_cleanup(void)
{
- if (sess) {
- if (_utee_close_ta_session(sess))
- panic();
- sess = 0;
- }
-
- _utee_return(0);
+ _ldelf_return(0);
/*NOTREACHED*/
while (true)
;
}
-static TEE_Result invoke_sys_ta(uint32_t cmdid, struct utee_params *params)
-{
- TEE_Result res = TEE_SUCCESS;
- uint32_t ret_orig = 0;
-
- if (!sess) {
- uint32_t s = 0;
-
- res = _utee_open_ta_session(&(const TEE_UUID)PTA_SYSTEM_UUID,
- 0, NULL, &s, &ret_orig);
- if (res)
- return res;
- sess = s;
- }
-
- return _utee_invoke_ta_command(sess, 0, cmdid, params, &ret_orig);
-}
-
TEE_Result sys_map_zi(size_t num_bytes, uint32_t flags, vaddr_t *va,
size_t pad_begin, size_t pad_end)
{
- TEE_Result res = TEE_SUCCESS;
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INOUT,
- TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_NONE),
- };
- uint32_t r[2] = { 0 };
-
- params.vals[0] = num_bytes;
- params.vals[1] = flags;
- reg_pair_from_64(*va, r, r + 1);
- params.vals[2] = r[0];
- params.vals[3] = r[1];
- params.vals[4] = pad_begin;
- params.vals[5] = pad_end;
-
- res = invoke_sys_ta(PTA_SYSTEM_MAP_ZI, &params);
- if (!res)
- *va = reg_pair_to_64(params.vals[2], params.vals[3]);
- return res;
+ return _ldelf_map_zi(va, num_bytes, pad_begin, pad_end, flags);
}
TEE_Result sys_unmap(vaddr_t va, size_t num_bytes)
{
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE),
- };
- uint32_t r[2] = { 0 };
-
- params.vals[0] = num_bytes;
- reg_pair_from_64(va, r, r + 1);
- params.vals[2] = r[0];
- params.vals[3] = r[1];
-
- return invoke_sys_ta(PTA_SYSTEM_UNMAP, &params);
+ return _ldelf_unmap(va, num_bytes);
}
TEE_Result sys_open_ta_bin(const TEE_UUID *uuid, uint32_t *handle)
{
- TEE_Result res = TEE_SUCCESS;
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
- TEE_PARAM_TYPE_VALUE_OUTPUT,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE),
- };
-
- params.vals[0] = (vaddr_t)uuid;
- params.vals[1] = sizeof(*uuid);
-
- res = invoke_sys_ta(PTA_SYSTEM_OPEN_TA_BINARY, &params);
- if (!res)
- *handle = params.vals[2];
- return res;
+ return _ldelf_open_bin(uuid, sizeof(TEE_UUID), handle);
}
TEE_Result sys_close_ta_bin(uint32_t handle)
{
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE),
- };
-
- params.vals[0] = handle;
-
- return invoke_sys_ta(PTA_SYSTEM_CLOSE_TA_BINARY, &params);
+ return _ldelf_close_bin(handle);
}
TEE_Result sys_map_ta_bin(vaddr_t *va, size_t num_bytes, uint32_t flags,
uint32_t handle, size_t offs, size_t pad_begin,
size_t pad_end)
{
- TEE_Result res = TEE_SUCCESS;
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INOUT,
- TEE_PARAM_TYPE_VALUE_INPUT),
- };
- uint32_t r[2] = { 0 };
-
- params.vals[0] = handle;
- params.vals[1] = flags;
- params.vals[2] = offs;
- params.vals[3] = num_bytes;
- reg_pair_from_64(*va, r, r + 1);
- params.vals[4] = r[0];
- params.vals[5] = r[1];
- params.vals[6] = pad_begin;
- params.vals[7] = pad_end;
-
- res = invoke_sys_ta(PTA_SYSTEM_MAP_TA_BINARY, &params);
- if (!res)
- *va = reg_pair_to_64(params.vals[4], params.vals[5]);
- return res;
+ return _ldelf_map_bin(va, num_bytes, handle, offs,
+ pad_begin, pad_end, flags);
}
TEE_Result sys_copy_from_ta_bin(void *dst, size_t num_bytes, uint32_t handle,
size_t offs)
{
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_MEMREF_OUTPUT,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE),
- };
-
- params.vals[0] = handle;
- params.vals[1] = offs;
- params.vals[2] = (vaddr_t)dst;
- params.vals[3] = num_bytes;
-
- return invoke_sys_ta(PTA_SYSTEM_COPY_FROM_TA_BINARY, &params);
+ return _ldelf_cp_from_bin(dst, offs, num_bytes, handle);
}
TEE_Result sys_set_prot(vaddr_t va, size_t num_bytes, uint32_t flags)
{
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_NONE,
- TEE_PARAM_TYPE_NONE),
- };
- uint32_t r[2] = { 0 };
-
- params.vals[0] = num_bytes;
- params.vals[1] = flags;
- reg_pair_from_64(va, r, r + 1);
- params.vals[2] = r[0];
- params.vals[3] = r[1];
-
- return invoke_sys_ta(PTA_SYSTEM_SET_PROT, &params);
+ return _ldelf_set_prot(va, num_bytes, flags);
}
TEE_Result sys_remap(vaddr_t old_va, vaddr_t *new_va, size_t num_bytes,
size_t pad_begin, size_t pad_end)
{
- TEE_Result res = TEE_SUCCESS;
- struct utee_params params = {
- .types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INPUT,
- TEE_PARAM_TYPE_VALUE_INOUT,
- TEE_PARAM_TYPE_VALUE_INPUT),
- };
- uint32_t r[2] = { 0 };
-
- params.vals[0] = num_bytes;
- reg_pair_from_64(old_va, r, r + 1);
- params.vals[2] = r[0];
- params.vals[3] = r[1];
- reg_pair_from_64(*new_va, r, r + 1);
- params.vals[4] = r[0];
- params.vals[5] = r[1];
- params.vals[6] = pad_begin;
- params.vals[7] = pad_end;
-
- res = invoke_sys_ta(PTA_SYSTEM_REMAP, &params);
- if (!res)
- *new_va = reg_pair_to_64(params.vals[4], params.vals[5]);
- return res;
+ return _ldelf_remap(old_va, new_va, num_bytes, pad_begin, pad_end);
+}
+
+TEE_Result sys_gen_random_num(void *buf, size_t blen)
+{
+ return _ldelf_gen_rnd_num(buf, blen);
}
diff --git a/ldelf/sys.h b/ldelf/sys.h
index fbbfb37a..7051d554 100644
--- a/ldelf/sys.h
+++ b/ldelf/sys.h
@@ -1,17 +1,18 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
#ifndef SYS_H
#define SYS_H
#include <compiler.h>
+#include <ldelf_syscalls.h>
#include <stddef.h>
#include <tee_api_types.h>
#include <trace.h>
#include <types_ext.h>
-#include <utee_syscalls.h>
#if defined(CFG_TEE_CORE_DEBUG)
#define panic() __panic(__FILE__, __LINE__, __func__)
@@ -30,7 +31,7 @@ void __noreturn sys_return_cleanup(void);
#define err(res, ...) \
do { \
trace_printf_helper(TRACE_ERROR, true, __VA_ARGS__); \
- _utee_return(res); \
+ _ldelf_return(res); \
} while (0)
TEE_Result sys_map_zi(size_t num_bytes, uint32_t flags, vaddr_t *va,
@@ -46,5 +47,6 @@ TEE_Result sys_copy_from_ta_bin(void *dst, size_t num_bytes, uint32_t handle,
TEE_Result sys_set_prot(vaddr_t va, size_t num_bytes, uint32_t flags);
TEE_Result sys_remap(vaddr_t old_va, vaddr_t *new_va, size_t num_bytes,
size_t pad_begin, size_t pad_end);
+TEE_Result sys_gen_random_num(void *buf, size_t blen);
#endif /*SYS_H*/
diff --git a/ldelf/syscalls_a32.S b/ldelf/syscalls_a32.S
new file mode 100644
index 00000000..332fa94c
--- /dev/null
+++ b/ldelf/syscalls_a32.S
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (c) 2014, STMicroelectronics International N.V.
+ * Copyright (c) 2015, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
+ */
+
+#include <asm.S>
+
+ .section .text
+ .balign 4
+ .code 32
+
+ .macro LDELF_SYSCALL name, scn, num_args
+ FUNC \name , :
+
+ .if \num_args > 8
+ .error "Too many arguments for syscall"
+ .endif
+
+ push {r5-r7, lr}
+UNWIND( .save {r5-r7, lr})
+ mov r7, #(\scn)
+
+ .if \num_args <= 4
+ @ No arguments passed on stack
+ mov r6, #0
+ .else
+ @ Tell number of arguments passed on the stack
+ mov r6, #(\num_args - 4)
+ @ Point just before the push (4 registers) above on the first argument
+ add r5, sp, #(4 * 4)
+ .endif
+
+ svc #0
+ pop {r5-r7, pc}
+ END_FUNC \name
+ .endm
+
+ FUNC _ldelf_panic, :
+ push {r0-r11, lr}
+UNWIND( .save {r0-r11, lr})
+ mov lr, pc
+ push {lr}
+UNWIND( .save {lr})
+ mov r1, sp
+ bl __ldelf_panic
+ /* Not reached */
+ END_FUNC _ldelf_panic
+
+#include "syscalls_asm.S"
diff --git a/ldelf/syscalls_a64.S b/ldelf/syscalls_a64.S
new file mode 100644
index 00000000..09af6827
--- /dev/null
+++ b/ldelf/syscalls_a64.S
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (c) 2015, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
+ */
+
+#include <asm.S>
+
+ .section .text
+
+ .macro LDELF_SYSCALL name, scn, num_args
+ FUNC \name , :
+
+ .if \num_args > 8
+ .error "Too many arguments for syscall"
+ .endif
+
+ mov x8, #(\scn)
+ svc #0
+ ret
+ END_FUNC \name
+ .endm
+
+ FUNC _ldelf_panic, :
+ stp x29, x30, [sp, #-16]!
+ mov x1, sp
+ bl __ldelf_panic
+ /* Not reached */
+ END_FUNC _ldelf_panic
+
+#include "syscalls_asm.S"
diff --git a/ldelf/syscalls_asm.S b/ldelf/syscalls_asm.S
new file mode 100644
index 00000000..959ec6a7
--- /dev/null
+++ b/ldelf/syscalls_asm.S
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (c) 2020, Arm Limited
+ */
+
+#include <ldelf.h>
+
+/* macro function name syscall num num of args */
+LDELF_SYSCALL _ldelf_return, LDELF_RETURN, 1
+LDELF_SYSCALL _ldelf_log, LDELF_LOG, 2
+LDELF_SYSCALL __ldelf_panic, LDELF_PANIC, 1
+LDELF_SYSCALL _ldelf_map_zi, LDELF_MAP_ZI, 6
+LDELF_SYSCALL _ldelf_unmap, LDELF_UNMAP, 3
+LDELF_SYSCALL _ldelf_open_bin, LDELF_OPEN_BIN, 3
+LDELF_SYSCALL _ldelf_close_bin, LDELF_CLOSE_BIN, 1
+LDELF_SYSCALL _ldelf_map_bin, LDELF_MAP_BIN, 8
+LDELF_SYSCALL _ldelf_cp_from_bin, LDELF_CP_FROM_BIN, 4
+LDELF_SYSCALL _ldelf_set_prot, LDELF_SET_PROT, 4
+LDELF_SYSCALL _ldelf_remap, LDELF_REMAP, 7
+LDELF_SYSCALL _ldelf_gen_rnd_num, LDELF_GEN_RND_NUM, 2
diff --git a/ldelf/ta_elf.c b/ldelf/ta_elf.c
index 17f486ed..1310e176 100644
--- a/ldelf/ta_elf.c
+++ b/ldelf/ta_elf.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2020, Arm Limited
*/
#include <assert.h>
@@ -10,7 +11,6 @@
#include <elf_common.h>
#include <ldelf.h>
#include <link.h>
-#include <pta_system.h>
#include <stdio.h>
#include <stdlib.h>
#include <string_ext.h>
@@ -19,7 +19,6 @@
#include <tee_internal_api_extensions.h>
#include <unw/unwind.h>
#include <user_ta_header.h>
-#include <utee_syscalls.h>
#include <util.h>
#include "sys.h"
@@ -430,7 +429,7 @@ static void init_elf(struct ta_elf *elf)
{
TEE_Result res = TEE_SUCCESS;
vaddr_t va = 0;
- uint32_t flags = PTA_SYSTEM_MAP_FLAG_SHAREABLE;
+ uint32_t flags = LDELF_MAP_FLAG_SHAREABLE;
size_t sz = 0;
res = sys_open_ta_bin(&elf->uuid, &elf->handle);
@@ -442,7 +441,7 @@ static void init_elf(struct ta_elf *elf)
* the ELF header is included in a load segment.
*/
if (!elf->is_main)
- flags |= PTA_SYSTEM_MAP_FLAG_EXECUTABLE;
+ flags |= LDELF_MAP_FLAG_EXECUTABLE;
res = sys_map_ta_bin(&va, SMALL_PAGE_SIZE, flags, elf->handle, 0, 0, 0);
if (res)
err(res, "sys_map_ta_bin");
@@ -710,7 +709,7 @@ static size_t get_pad_begin(void)
COMPILE_TIME_ASSERT(CFG_TA_ASLR_MIN_OFFSET_PAGES <
CFG_TA_ASLR_MAX_OFFSET_PAGES);
if (max > min) {
- res = _utee_cryp_random_number_generate(&rnd32, sizeof(rnd32));
+ res = sys_gen_random_num(&rnd32, sizeof(rnd32));
if (res) {
DMSG("Random read failed: %#"PRIx32, res);
return min * SMALL_PAGE_SIZE;
@@ -812,15 +811,15 @@ static void populate_segments(struct ta_elf *elf)
}
if (seg->flags & PF_W)
- flags |= PTA_SYSTEM_MAP_FLAG_WRITEABLE;
+ flags |= LDELF_MAP_FLAG_WRITEABLE;
else
- flags |= PTA_SYSTEM_MAP_FLAG_SHAREABLE;
+ flags |= LDELF_MAP_FLAG_SHAREABLE;
if (seg->flags & PF_X)
- flags |= PTA_SYSTEM_MAP_FLAG_EXECUTABLE;
+ flags |= LDELF_MAP_FLAG_EXECUTABLE;
if (!(seg->flags & PF_R))
err(TEE_ERROR_NOT_SUPPORTED,
"Segment must be readable");
- if (flags & PTA_SYSTEM_MAP_FLAG_WRITEABLE) {
+ if (flags & LDELF_MAP_FLAG_WRITEABLE) {
res = sys_map_zi(memsz, 0, &va, pad_begin,
pad_end);
if (pad_begin && res == TEE_ERROR_OUT_OF_MEMORY)
@@ -1192,9 +1191,9 @@ void ta_elf_finalize_mappings(struct ta_elf *elf)
uint32_t flags = 0;
if (seg->flags & PF_W)
- flags |= PTA_SYSTEM_MAP_FLAG_WRITEABLE;
+ flags |= LDELF_MAP_FLAG_WRITEABLE;
if (seg->flags & PF_X)
- flags |= PTA_SYSTEM_MAP_FLAG_EXECUTABLE;
+ flags |= LDELF_MAP_FLAG_EXECUTABLE;
res = sys_set_prot(va, seg->memsz, flags);
if (res)