linux-mips
[Top] [All Lists]

Re: unkillable process due to setup_frame() failure

To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Subject: Re: unkillable process due to setup_frame() failure
From: Ralf Baechle <ralf@linux-mips.org>
Date: Tue, 6 Sep 2005 19:41:19 +0100
Cc: linux-mips@linux-mips.org
In-reply-to: <20050907.014234.108739386.anemo@mba.ocn.ne.jp>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20050907.014234.108739386.anemo@mba.ocn.ne.jp>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.2.1i
On Wed, Sep 07, 2005 at 01:42:34AM +0900, Atsushi Nemoto wrote:

> 1.  The "break" instruction raises a exception.
> 2.  The exception handler queues SIGTRAP(5).
> 3.  dequeue_signal() dequeue a signal with LOWEST number (i.e. SIGTRAP).
> 4.  setup_frame() fails due to bad stack pointer and queues SIGSEGV(11).
> 5.  returns to user process (pc unchanged).
> 6.  goto 1. (forever)
> 
> So, the process can not be kill by SIGKILL.  In 2.6.12, 'sigkill
> priority fix' was applied to __dequeue_signal(), but it does not help
> while the SIGTRAP is queued to tsk->pending but SIGKILL (by kill
> command) is queued to tsk->signal->shared_pending.

The behaviour of not advancing the EPC beyond the faulting instruction is
part of the problem - but I believe that was the usual behaviour for
MIPS UNIXoid operating systems.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>