On Mon, Oct 29, 2001 at 02:35:45PM +0100, email@example.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.