From 3ed5b365c5134cb18da8aed397c7c4551af25715 Mon Sep 17 00:00:00 2001 From: Daan De Meyer 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; }