From: Yuteng Zhong Date: Sun, 9 Oct 2022 14:53:27 +0000 (+0800) Subject: jail: ignore missing .dynamic sect X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=93b2c2d5ed4ca369a9ea48163024125b958212b5;p=project%2Fprocd.git jail: ignore missing .dynamic sect A static-linked binary doesn't have a .dynamic section, but when starting ujail with -r or -w will automatically search for PT_DYNAMIC in ELF and exit with failure if it is not found. github issue: https://github.com/openwrt/openwrt/issues/10933 Signed-off-by: Yuteng Zhong --- diff --git a/jail/elf.c b/jail/elf.c index 176d046..978fc6e 100644 --- a/jail/elf.c +++ b/jail/elf.c @@ -236,18 +236,18 @@ int elf_load_deps(const char *path, const char *map) unsigned long load_offset, load_vaddr; unsigned long 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); - return -1; + if (elf_find_section(map, PT_INTERP, &interp_offset, NULL, NULL) == 0) { + add_path_and_deps(map+interp_offset, 1, -1, 0); } - if (elf_find_section(map, PT_DYNAMIC, &dyn_offset, &dyn_size, NULL)) { - ERROR("failed to load the .dynamic section from %s\n", path); - return -1; + if (elf_find_section(map, PT_LOAD, &load_offset, NULL, &load_vaddr)) { + DEBUG("failed to load the .load section from %s\n", path); + return 0; } - if (elf_find_section(map, PT_INTERP, &interp_offset, NULL, NULL) == 0) { - add_path_and_deps(map+interp_offset, 1, -1, 0); + if (elf_find_section(map, PT_DYNAMIC, &dyn_offset, &dyn_size, NULL)) { + DEBUG("failed to load the .dynamic section from %s\n", path); + return 0; } int clazz = map[EI_CLASS];