From: Yu Watanabe Date: Wed, 8 Oct 2025 15:39:11 +0000 (+0900) Subject: coredump: shortcut to start backtrace mode X-Git-Tag: v259-rc1~190^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d73712ef744adeade9377bb268867521b048655;p=thirdparty%2Fsystemd.git coredump: shortcut to start backtrace mode 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. --- diff --git a/src/coredump/coredump-backtrace.c b/src/coredump/coredump-backtrace.c index 4e223e52200..4d80cae24c8 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 6e110db630c..c29976e281e 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),