procd: 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.

Fixes: #970

Signed-off-by: Yuteng Zhong <zonyitoo@qq.com>
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Yuteng Zhong 2023-06-05 15:54:53 +08:00 committed by Tianling Shen
parent 0c9a28e9e0
commit 7cf6696120
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
3 changed files with 70 additions and 5 deletions

View File

@ -10,8 +10,6 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
uxc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/uxc.c b/uxc.c
index eb40eb2..b22d838 100644
--- a/uxc.c
+++ b/uxc.c
@@ -80,6 +80,8 @@ static struct blob_buf conf;
@ -31,6 +29,3 @@ index eb40eb2..b22d838 100644
int signal = SIGTERM;
int c;
--
2.37.2

View File

@ -0,0 +1,25 @@
From 24f6bc4322754a753e4e3e413659d542fa798c7b Mon Sep 17 00:00:00 2001
From: Philipp Meier <philipp.meier@westermo.com>
Date: Tue, 8 Nov 2022 14:38:37 +0100
Subject: [PATCH] jail: correctly check for null pointer
Handle case where opts.sysctl is not used.
Signed-off-by: Philipp Meier <philipp.meier@westermo.com>
---
jail/jail.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/jail/jail.c
+++ b/jail/jail.c
@@ -213,6 +213,10 @@ static void free_hooklist(struct hook_ex
static void free_sysctl(void) {
struct sysctl_val *cur;
+
+ if (!opts.sysctl)
+ return;
+
cur = *opts.sysctl;
while (cur) {

View File

@ -0,0 +1,45 @@
From 93b2c2d5ed4ca369a9ea48163024125b958212b5 Mon Sep 17 00:00:00 2001
From: Yuteng Zhong <zonyitoo@qq.com>
Date: Sun, 9 Oct 2022 22:53:27 +0800
Subject: [PATCH] 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 <zonyitoo@qq.com>
---
jail/elf.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
--- a/jail/elf.c
+++ b/jail/elf.c
@@ -240,18 +240,18 @@ int elf_load_deps(const char *path, cons
gcc_mips64_bug_work_around = 1;
#endif
- 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];