jail: ignore missing .dynamic sect
authorYuteng Zhong <zonyitoo@qq.com>
Sun, 9 Oct 2022 14:53:27 +0000 (22:53 +0800)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 10 Nov 2022 20:30:42 +0000 (20:30 +0000)
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 <zonyitoo@qq.com>
jail/elf.c

index 176d046b602baa97530cbc9bb15e8b8067a0c0ce..978fc6e113514578d302e343b9bb7807f53bb941 100644 (file)
@@ -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];