summaryrefslogtreecommitdiff
path: root/src/coredump/coredump.c
diff options
context:
space:
mode:
authorLuca Boccassi <luca.boccassi@microsoft.com>2021-11-21 17:05:28 +0000
committerLuca Boccassi <luca.boccassi@microsoft.com>2021-11-30 16:49:58 +0000
commit61aea456c12c54f49c4a76259af130e576130ce9 (patch)
tree2949292609f07bcdea764ec98b1a7e5d7cd5e1dc /src/coredump/coredump.c
parent67f7675f477d369506eeb17ef2d5b365f83ac84a (diff)
downloadsystemd-61aea456c12c54f49c4a76259af130e576130ce9.tar.gz
coredump: analyze object with libdwelf in forked process
Parsing objects is risky as data could be malformed or malicious, so avoid doing that from the main systemd-coredump process and instead fork another process, and set it to avoid generating core files itself.
Diffstat (limited to 'src/coredump/coredump.c')
-rw-r--r--src/coredump/coredump.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
index 9b035a5d8a..c4b393631a 100644
--- a/src/coredump/coredump.c
+++ b/src/coredump/coredump.c
@@ -825,7 +825,11 @@ static int submit_coredump(
"than %"PRIu64" (the configured maximum)",
coredump_size, arg_process_size_max);
} else if (coredump_fd >= 0)
- coredump_parse_core(coredump_fd, context->meta[META_EXE], &stacktrace, &json_metadata);
+ (void) parse_elf_object(coredump_fd,
+ context->meta[META_EXE],
+ /* fork_disable_dump= */endswith(context->meta[META_EXE], "systemd-coredump"), /* avoid loops */
+ &stacktrace,
+ &json_metadata);
#endif
log: