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.
This commit is contained in:
Yu Watanabe
2025-10-28 14:31:37 +09:00
parent e09543b87b
commit 4d73712ef7
2 changed files with 11 additions and 9 deletions
+1
View File
@@ -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();
+10 -9
View File
@@ -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),