lkml.org 
[lkml]   [2009]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [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.


    \
     
     \ /
      Last update: 2009-05-27 20:39    [W:0.022 / U:31.140 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site