diff options
author | Balint Dobszay <balint.dobszay@arm.com> | 2020-12-11 16:25:47 +0100 |
---|---|---|
committer | Jérôme Forissier <jerome@forissier.org> | 2021-01-05 17:56:19 +0100 |
commit | baa5161d50da0b430760fa9e2180496c2806f839 (patch) | |
tree | af0751444c45a46857c241b9044dac8a6ae1941e /ldelf | |
parent | 988ea29c4666687dcc038a35efd6412567be57bf (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.h | 23 | ||||
-rw-r--r-- | ldelf/include/ldelf_syscalls.h | 33 | ||||
-rw-r--r-- | ldelf/start_a32.S | 5 | ||||
-rw-r--r-- | ldelf/start_a64.S | 5 | ||||
-rw-r--r-- | ldelf/sub.mk | 2 | ||||
-rw-r--r-- | ldelf/sys.c | 182 | ||||
-rw-r--r-- | ldelf/sys.h | 6 | ||||
-rw-r--r-- | ldelf/syscalls_a32.S | 51 | ||||
-rw-r--r-- | ldelf/syscalls_a64.S | 31 | ||||
-rw-r--r-- | ldelf/syscalls_asm.S | 20 | ||||
-rw-r--r-- | ldelf/ta_elf.c | 21 |
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, ¶ms); - 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, ¶ms); + 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, ¶ms); - 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, ¶ms); + 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, ¶ms); - 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, ¶ms); + 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, ¶ms); + 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, ¶ms); - 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) |