On 04/19/2012 09:45 PM, Eric Blake wrote:
POSIX says that sa_sigaction is only safe to use if sa_flags
includes SA_SIGINFO; conversely, sa_handler is only safe to
use when flags excludes that bit. Gnulib doesn't guarantee
an implementation of SA_SIGINFO, but does guarantee that
if SA_SIGINFO is undefined, we can safely define it to 0 as
long as we don't dereference the 2nd or 3rd argument of
any handler otherwise registered via sa_sigaction.
Based on a report by Wen Congyang.
* src/rpc/virnetserver.c (SA_SIGINFO): Stub for mingw.
(virNetServerSignalHandler): Avoid bogus dereference.
(virNetServerFatalSignal, virNetServerNew): Set flags properly.
---
+static void
+virNetServerSignalHandler(int sig, siginfo_t * siginfo ATTRIBUTE_UNUSED,
+ void* context ATTRIBUTE_UNUSED)
{
int origerrno;
int r;
+ siginfo_t tmp;
+
+ if (SA_SIGINFO)
+ tmp = *siginfo;
+ else
+ memset(&tmp, 0, sizeof(tmp));
/* set the sig num in the struct */
- siginfo->si_signo = sig;
+ tmp->si_signo = sig;
I typo'd that (serves me right for sending before one last compile
test); it should be tmp.si_signo.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org