The problem is that if an interrupt did something bad, we still have to
get _some_ kind of sane state from somewhere. We can't just return to the
interrupt handler that did the bad thing (it will keep on happening), so
no, we can't just return.
So the way we handle it is to tell the user that something really bad
happened, and then try to kill the current context. No, it's not really
the current context that did anything bad, but the point is that that way
we can at least try to clean up after us - even if it means killing a
innocent process.
[ Stop the presses: "Linux kills innocent children" ]
Fundamentally, this is a "don't do that, then" issue. Interrupts must
_never_ do anything which can trap, and if they do, we really have no way
to clean up after them. The above is not so much catching it as telling
people that we have a problem.
Linus