linux-mips
[Top] [All Lists]

Re: Fixup in unaligned.c

To: tommy.christensen@eicon.com
Subject: Re: Fixup in unaligned.c
From: Ralf Baechle <ralf@oss.sgi.com>
Date: Tue, 30 Oct 2001 10:17:09 +0100
Cc: linux-mips@oss.sgi.com
In-reply-to: <3BDD5B31.E12DE812@eicon.com>; from tommy.christensen@eicon.com on Mon, Oct 29, 2001 at 02:35:45PM +0100
References: <3BDD5B31.E12DE812@eicon.com>
Sender: owner-linux-mips@oss.sgi.com
User-agent: Mutt/1.2.5i
On Mon, Oct 29, 2001 at 02:35:45PM +0100, tommy.christensen@eicon.com wrote:

> It seems we don't always handle bad user-mode pointers correctly.
> If put_user is called with an unmapped AND unaligned address it
> kills the current process instead of returning EFAULT.
> 
> The reason for this is that we do compute_return_epc() in do_ade()
> before the exception table is searched, so we never get a match.

The missplaced branch emulation is a known problem in basically all of our
execption handers that have to emulate branches in software.  It also
effects ptrace; it is possible that a debugger already observes the new epc
after the branch has been executed but the instruction in the delay slow
wasn't due to some problem like a page fault.

> Below is a simple patch to fix it (attached as well).
> The second part is not related, but it makes sense to only consult
> the MF_FIXADE flag on exceptions originating from user-mode, right?

That's actually an evil one from which local DoS attacks can be constructed.

  Ralf

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