Re: [2.6.27.24] Kernel coredump to a pipe is failing



On 05/26, Andi Kleen wrote:

When a signal happens during core dump the core dump to a pipe
can fail, because the write returns short, but the ELF core dumpers
cannot handle that.

There's no reason to handle signals during core dumping, so just
block them all.

Actually, I think there is a strong reason to handle signals during
core dumping. The coredump can take a lot of time/resources, not good
it looks like unkillable procees to users.

Please look at

killable/interruptible coredumps
http://marc.info/?l=linux-kernel&m=121665710711931

at least, I think SIGKILL should terminate core dumping.

Open issue: ELF puts blocked signals into the core dump and
that will be always fully blocked now. Need to save it somewhere?

--- linux-2.6.30-rc5-ak.orig/fs/exec.c 2009-05-14 11:46:24.000000000 +0200
+++ linux-2.6.30-rc5-ak/fs/exec.c 2009-05-26 22:22:12.000000000 +0200
@@ -1760,6 +1760,12 @@
goto fail;
}

+ /* block all signals */
+ spin_lock_irq(&current->sighand->siglock);
+ sigfillset(&current->blocked);
+ /* No recalc sigpending */
+ spin_unlock_irq(&current->sighand->siglock);

Perhaps it makes sense to do

--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -644,6 +644,7 @@ static int prepare_signal(int sig, struc
/*
* The process is in the middle of dying, nothing to do.
*/
+ return 0;
} else if (sig_kernel_stop(sig)) {
/*
* This is a stop signal. Remove SIGCONT from all queues.

instead, this was discussed before. This way the exiting/coredumping
task ignores all signals, and we cab simplify complete_signal() a bit.


This all needs more discussion, but imho for now something like
Paul's patch http://marc.info/?l=linux-kernel&m=124340506200729
is the best workaround. Note that we have the same dump_write()
in binfmt_elf.c and binfmt_aout.c, perhaps it makes sense to
create coredump_file_write() helper in fs/exec.c.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages