Re: crashme on ARM - unkillable processes

From: Linus Torvalds
Date: Sun Nov 09 2003 - 15:44:15 EST



On Sun, 9 Nov 2003, Russell King wrote:
>
> The code which crashme generated corrupted the user stack pointer. We
> then tried to deliver a signal, found the user stack pointer invalid,
> and tried to deliver a SEGV to the process via force_sig(). Unfortunately,
> this signal never made it through for the reasons described previously.
> (We dequeued the ILL, found we couldn't setup the stack frame, force_sig,
> returned to userspace, generated another undefined instruction exception
> on the same instruction, etc.)

Ahh. I think I found why ARM has this problem, and others don't.

Your SA_NODEFER handling is broken.

The thing is, you only block a signal if its stack frame was successfully
done _and_ SA_NODEFER is not set.

It should be the other way around. You should block a signal if it's stack
frame was unsuccessful _or_ SA_NODEFER was not set.

(x86 gets this wrong too, in the sense that we don't even check to see if
the stack frame was successful - but since nobody sets SA_NODEFER anyway,
we don't really much care).

Linus

-
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/