diff --git a/src/coredump/coredump-backtrace.c b/src/coredump/coredump-backtrace.c index 4e223e5220..4d80cae24c 100644 --- a/src/coredump/coredump-backtrace.c +++ b/src/coredump/coredump-backtrace.c @@ -18,6 +18,7 @@ int coredump_backtrace(int argc, char *argv[]) { assert(argc >= 2); + log_setup(); log_debug("Processing backtrace on stdin..."); iovw = iovw_new(); diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c index 6e110db630..c29976e281 100644 --- a/src/coredump/coredump.c +++ b/src/coredump/coredump.c @@ -13,9 +13,13 @@ static int run(int argc, char *argv[]) { int r; + /* When running as backtrace mode, it is not necessary to use kmsg, not necessary to disable coredump + * from the command, and unexpectedly passed file descriptors can be silently ignored. */ + if (streq_ptr(argv[1], "--backtrace")) + return coredump_backtrace(argc, argv); + /* First, log to a safe place, since we don't know what crashed and it might * be journald which we'd rather not log to then. */ - log_set_target_and_open(LOG_TARGET_KMSG); /* Make sure we never enter a loop */ @@ -25,14 +29,11 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to determine the number of file descriptors: %m"); - /* If we got an fd passed, we are running in coredumpd mode. Otherwise we - * are invoked from the kernel as coredump handler. */ - if (r == 0) { - if (streq_ptr(argv[1], "--backtrace")) - return coredump_backtrace(argc, argv); - else - return coredump_kernel_helper(argc, argv); - } else if (r == 1) + /* If we got an fd passed, we are running in coredumpd mode. Otherwise we are invoked from the + * kernel as coredump handler. */ + if (r == 0) + return coredump_kernel_helper(argc, argv); + if (r == 1) return coredump_receive(SD_LISTEN_FDS_START); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),