From: Etienne CHAMPETIER Date: Fri, 27 Nov 2015 16:27:16 +0000 (+0000) Subject: ujail: add ELF interpreter (DT_INTERP) to the jail X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=6ffa138d4424dc1f1e05e8923a8d67c8394ac896;p=oweals%2Fprocd.git ujail: add ELF interpreter (DT_INTERP) to the jail this is needed by musl (openwrt DD) uClibc/glibc is working without this this partly fixes https://dev.openwrt.org/ticket/20785 we still don't handle DT_RPATH, DT_RUNPATH, nodeflib, ... see http://man7.org/linux/man-pages/man8/ld.so.8.html Signed-off-by: Etienne CHAMPETIER --- diff --git a/jail/elf.c b/jail/elf.c index 136789e..b8f2cc5 100644 --- a/jail/elf.c +++ b/jail/elf.c @@ -234,6 +234,7 @@ int elf_load_deps(const char *path, const char *map) { unsigned int dyn_offset, dyn_size; unsigned int load_offset, load_vaddr; + unsigned int interp_offset; if (elf_find_section(map, PT_LOAD, &load_offset, NULL, &load_vaddr)) { ERROR("failed to load the .load section from %s\n", path); @@ -245,6 +246,10 @@ int elf_load_deps(const char *path, const char *map) return -1; } + if (elf_find_section(map, PT_INTERP, &interp_offset, NULL, NULL) == 0) { + add_path_and_deps(map+interp_offset, 1, -1, 0); + } + int clazz = map[EI_CLASS]; if (clazz == ELFCLASS32)