You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.9 KiB
127 lines
3.9 KiB
From 3ed5b365c5134cb18da8aed397c7c4551af25715 Mon Sep 17 00:00:00 2001 |
|
From: Daan De Meyer <daan.j.demeyer@gmail.com> |
|
Date: Tue, 1 Mar 2022 17:04:13 +0000 |
|
Subject: [PATCH] shared: Add more dlopen() tests |
|
|
|
Add dlopen_dw(), dlopen_elf() and dlopen_pcre2() to the dlopen test. |
|
To enable adding dlopen_pcre2(), we move pcre2-dlopen.h/c from |
|
src/journal to src/shared. |
|
|
|
(cherry picked from commit ee48779e05831a0ec5e1ba5e7ed5fe92aaca1d9e) |
|
|
|
Related: #2017035 |
|
--- |
|
src/journal/meson.build | 2 -- |
|
src/shared/elf-util.c | 4 ++-- |
|
src/shared/elf-util.h | 3 +++ |
|
src/shared/meson.build | 2 ++ |
|
src/{journal => shared}/pcre2-dlopen.c | 0 |
|
src/{journal => shared}/pcre2-dlopen.h | 0 |
|
src/test/test-dlopen-so.c | 11 +++++++++++ |
|
7 files changed, 18 insertions(+), 4 deletions(-) |
|
rename src/{journal => shared}/pcre2-dlopen.c (100%) |
|
rename src/{journal => shared}/pcre2-dlopen.h (100%) |
|
|
|
diff --git a/src/journal/meson.build b/src/journal/meson.build |
|
index eb66bfd584..270592f2ac 100644 |
|
--- a/src/journal/meson.build |
|
+++ b/src/journal/meson.build |
|
@@ -49,8 +49,6 @@ systemd_cat_sources = files('cat.c') |
|
|
|
journalctl_sources = files(''' |
|
journalctl.c |
|
- pcre2-dlopen.c |
|
- pcre2-dlopen.h |
|
'''.split()) |
|
|
|
if install_sysconfdir_samples |
|
diff --git a/src/shared/elf-util.c b/src/shared/elf-util.c |
|
index 4d93e7eaba..6d9fcfbbf2 100644 |
|
--- a/src/shared/elf-util.c |
|
+++ b/src/shared/elf-util.c |
|
@@ -80,7 +80,7 @@ unsigned int (*sym_elf_version)(unsigned int); |
|
GElf_Phdr *(*sym_gelf_getphdr)(Elf *, int, GElf_Phdr *); |
|
size_t (*sym_gelf_getnote)(Elf_Data *, size_t, GElf_Nhdr *, size_t *, size_t *); |
|
|
|
-static int dlopen_dw(void) { |
|
+int dlopen_dw(void) { |
|
int r; |
|
|
|
r = dlopen_many_sym_or_warn( |
|
@@ -123,7 +123,7 @@ static int dlopen_dw(void) { |
|
return 1; |
|
} |
|
|
|
-static int dlopen_elf(void) { |
|
+int dlopen_elf(void) { |
|
int r; |
|
|
|
r = dlopen_many_sym_or_warn( |
|
diff --git a/src/shared/elf-util.h b/src/shared/elf-util.h |
|
index cf3d9be128..b28e64cea6 100644 |
|
--- a/src/shared/elf-util.h |
|
+++ b/src/shared/elf-util.h |
|
@@ -4,6 +4,9 @@ |
|
#include "json.h" |
|
|
|
#if HAVE_ELFUTILS |
|
+int dlopen_dw(void); |
|
+int dlopen_elf(void); |
|
+ |
|
/* Parse an ELF object in a forked process, so that errors while iterating over |
|
* untrusted and potentially malicious data do not propagate to the main caller's process. |
|
* If fork_disable_dump, the child process will not dump core if it crashes. */ |
|
diff --git a/src/shared/meson.build b/src/shared/meson.build |
|
index 5dc58a863d..006310a917 100644 |
|
--- a/src/shared/meson.build |
|
+++ b/src/shared/meson.build |
|
@@ -241,6 +241,8 @@ shared_sources = files(''' |
|
parse-argument.h |
|
parse-socket-bind-item.c |
|
parse-socket-bind-item.h |
|
+ pcre2-dlopen.c |
|
+ pcre2-dlopen.h |
|
pe-header.h |
|
pkcs11-util.c |
|
pkcs11-util.h |
|
diff --git a/src/journal/pcre2-dlopen.c b/src/shared/pcre2-dlopen.c |
|
similarity index 100% |
|
rename from src/journal/pcre2-dlopen.c |
|
rename to src/shared/pcre2-dlopen.c |
|
diff --git a/src/journal/pcre2-dlopen.h b/src/shared/pcre2-dlopen.h |
|
similarity index 100% |
|
rename from src/journal/pcre2-dlopen.h |
|
rename to src/shared/pcre2-dlopen.h |
|
diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c |
|
index ea2ef31b1f..002f666ed8 100644 |
|
--- a/src/test/test-dlopen-so.c |
|
+++ b/src/test/test-dlopen-so.c |
|
@@ -5,10 +5,12 @@ |
|
|
|
#include "bpf-dlopen.h" |
|
#include "cryptsetup-util.h" |
|
+#include "elf-util.h" |
|
#include "idn-util.h" |
|
#include "libfido2-util.h" |
|
#include "macro.h" |
|
#include "main-func.h" |
|
+#include "pcre2-dlopen.h" |
|
#include "pwquality-util.h" |
|
#include "qrcode-util.h" |
|
#include "tests.h" |
|
@@ -49,6 +51,15 @@ static int run(int argc, char **argv) { |
|
assert_se(dlopen_bpf() >= 0); |
|
#endif |
|
|
|
+#if HAVE_ELFUTILS |
|
+ assert_se(dlopen_dw() >= 0); |
|
+ assert_se(dlopen_elf() >= 0); |
|
+#endif |
|
+ |
|
+#if HAVE_PCRE2 |
|
+ assert_se(dlopen_pcre2() >= 0); |
|
+#endif |
|
+ |
|
return 0; |
|
} |
|
|
|
|