From bb8cd6f08ea47e3f0d58169846fee0bbae18caae Mon Sep 17 00:00:00 2001 From: Jerome Forissier Date: Mon, 3 Aug 2020 09:58:33 +0200 Subject: ldelf: __resolve_sym(): support STT_NOTYPE Symbols defined in a linker script are assigned type STT_NOTYPE, but the __resolve_sym() function in ldelf only supports STT_OBJECT and STT_FUNCTION. As a result, it is impossible to resolve STT_NOTYPE symbols at runtime. This causes an error in shared libraries when ftrace is enabled: # Platform: QEMU $ make CFG_FTRACE_SUPPORT=y CFLAGS_ta_arm32=-pg run $ xtest 1019 D/LD: ldelf:134 Loading TA 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b E/LD: __resolve_sym:61 Symbol type not supported E/TC:? 0 init_with_ldelf:232 ldelf failed with res: 0xffff000a * regression_1019 Test dynamically linked TA regression_1000.c:1502: [...] TEEC_ERROR_NOT_SUPPORTED This commit adds STT_NOTYPE to the supported types, handled the same way as STT_OBJECT and STT_FUNCTION. Fixes: 97c5ac19427b ("ldelf: check ranges in __resolve_sym()") Signed-off-by: Jerome Forissier Reviewed-by: Jens Wiklander --- ldelf/ta_elf_rel.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ldelf/ta_elf_rel.c b/ldelf/ta_elf_rel.c index ad9274c2..782d1682 100644 --- a/ldelf/ta_elf_rel.c +++ b/ldelf/ta_elf_rel.c @@ -53,6 +53,7 @@ static bool __resolve_sym(struct ta_elf *elf, unsigned int st_bind, err(TEE_ERROR_BAD_FORMAT, "Symbol location out of range"); switch (st_type) { + case STT_NOTYPE: case STT_OBJECT: case STT_FUNC: *val = st_value + elf->load_addr; -- cgit v1.2.3