Re: 2.6.x signal handler bug

From: Andries Brouwer
Date: Sun Jun 27 2004 - 17:20:43 EST


On Sat, Jun 26, 2004 at 09:05:34AM -0700, Davide Libenzi wrote:

> You're receiving a SIGSEGV while SIGSEGV is blocked (force_sig_info). The
> force_sig_info call wants to send a signal that the task can't refuse
> (kinda The GodFather offers ;). The kernel will noticed this and will
> restore the handler to SIG_DFL.

Yes.

So checking whether this is POSIX conforming:

- Blocking a signal in its signal handler is explicitly allowed.
(signal(3p))
- It is unspecified what longjmp() does with the signal mask.
(longjmp(3p))
- The SIGSEGV that occurs during a stack overflow is of the GodFather kind.
(getrlimit(3p))
- If SIGSEGV is generated while blocked, the result is undefined
(sigprocmask(3p))

So, maybe the restoring to SIG_DFL was not required, but it doesnt seem
incorrect either. It may be a bit surprising.

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