Messages in this thread | | | Date | Sun, 9 Nov 2003 12:42:52 -0800 (PST) | From | Linus Torvalds <> | Subject | Re: crashme on ARM - unkillable processes |
| |
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |