blob: bdb268b2e5d2d6430583fb75bb614ccae19432a1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
|
signal mask not reset on exec
Seen in qemu-1.0 under 12.04, but AFAICT from current git it hasn't changed.
./main-loop.c:qemu_signal_init blocks SIGALRM so it can be handled via signalfd.
./net/tap.c:launch_script does not reset the signal mask before the execv() call, and signal masks are inherited. So the script is run with SIGALRM blocked (as can be seen in /proc/$$/status, "SigBlk: 0000000000002000"). One reasonable example of where this bites is an interface up script that calls ping with a timeout to give things a chance to settle down before continuing, but abort if this doesn't happen within a reasonable time). Since ping uses SIGALRM for the timeout, this now never terminates.
qemu-0.14 didn't block SIGALRM, so such scripts worked fine there.
|