xref: /openbmc/qemu/linux-user/signal.c (revision ae3c12a0)
1 /*
2  *  Emulation of Linux signals
3  *
4  *  Copyright (c) 2003 Fabrice Bellard
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 #include "qemu/osdep.h"
20 #include "qemu/bitops.h"
21 #include <sys/ucontext.h>
22 #include <sys/resource.h>
23 
24 #include "qemu.h"
25 #include "qemu-common.h"
26 #include "trace.h"
27 #include "signal-common.h"
28 
29 struct target_sigaltstack target_sigaltstack_used = {
30     .ss_sp = 0,
31     .ss_size = 0,
32     .ss_flags = TARGET_SS_DISABLE,
33 };
34 
35 static struct target_sigaction sigact_table[TARGET_NSIG];
36 
37 static void host_signal_handler(int host_signum, siginfo_t *info,
38                                 void *puc);
39 
40 static uint8_t host_to_target_signal_table[_NSIG] = {
41     [SIGHUP] = TARGET_SIGHUP,
42     [SIGINT] = TARGET_SIGINT,
43     [SIGQUIT] = TARGET_SIGQUIT,
44     [SIGILL] = TARGET_SIGILL,
45     [SIGTRAP] = TARGET_SIGTRAP,
46     [SIGABRT] = TARGET_SIGABRT,
47 /*    [SIGIOT] = TARGET_SIGIOT,*/
48     [SIGBUS] = TARGET_SIGBUS,
49     [SIGFPE] = TARGET_SIGFPE,
50     [SIGKILL] = TARGET_SIGKILL,
51     [SIGUSR1] = TARGET_SIGUSR1,
52     [SIGSEGV] = TARGET_SIGSEGV,
53     [SIGUSR2] = TARGET_SIGUSR2,
54     [SIGPIPE] = TARGET_SIGPIPE,
55     [SIGALRM] = TARGET_SIGALRM,
56     [SIGTERM] = TARGET_SIGTERM,
57 #ifdef SIGSTKFLT
58     [SIGSTKFLT] = TARGET_SIGSTKFLT,
59 #endif
60     [SIGCHLD] = TARGET_SIGCHLD,
61     [SIGCONT] = TARGET_SIGCONT,
62     [SIGSTOP] = TARGET_SIGSTOP,
63     [SIGTSTP] = TARGET_SIGTSTP,
64     [SIGTTIN] = TARGET_SIGTTIN,
65     [SIGTTOU] = TARGET_SIGTTOU,
66     [SIGURG] = TARGET_SIGURG,
67     [SIGXCPU] = TARGET_SIGXCPU,
68     [SIGXFSZ] = TARGET_SIGXFSZ,
69     [SIGVTALRM] = TARGET_SIGVTALRM,
70     [SIGPROF] = TARGET_SIGPROF,
71     [SIGWINCH] = TARGET_SIGWINCH,
72     [SIGIO] = TARGET_SIGIO,
73     [SIGPWR] = TARGET_SIGPWR,
74     [SIGSYS] = TARGET_SIGSYS,
75     /* next signals stay the same */
76     /* Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with
77        host libpthread signals.  This assumes no one actually uses SIGRTMAX :-/
78        To fix this properly we need to do manual signal delivery multiplexed
79        over a single host signal.  */
80     [__SIGRTMIN] = __SIGRTMAX,
81     [__SIGRTMAX] = __SIGRTMIN,
82 };
83 static uint8_t target_to_host_signal_table[_NSIG];
84 
85 int host_to_target_signal(int sig)
86 {
87     if (sig < 0 || sig >= _NSIG)
88         return sig;
89     return host_to_target_signal_table[sig];
90 }
91 
92 int target_to_host_signal(int sig)
93 {
94     if (sig < 0 || sig >= _NSIG)
95         return sig;
96     return target_to_host_signal_table[sig];
97 }
98 
99 static inline void target_sigaddset(target_sigset_t *set, int signum)
100 {
101     signum--;
102     abi_ulong mask = (abi_ulong)1 << (signum % TARGET_NSIG_BPW);
103     set->sig[signum / TARGET_NSIG_BPW] |= mask;
104 }
105 
106 static inline int target_sigismember(const target_sigset_t *set, int signum)
107 {
108     signum--;
109     abi_ulong mask = (abi_ulong)1 << (signum % TARGET_NSIG_BPW);
110     return ((set->sig[signum / TARGET_NSIG_BPW] & mask) != 0);
111 }
112 
113 void host_to_target_sigset_internal(target_sigset_t *d,
114                                     const sigset_t *s)
115 {
116     int i;
117     target_sigemptyset(d);
118     for (i = 1; i <= TARGET_NSIG; i++) {
119         if (sigismember(s, i)) {
120             target_sigaddset(d, host_to_target_signal(i));
121         }
122     }
123 }
124 
125 void host_to_target_sigset(target_sigset_t *d, const sigset_t *s)
126 {
127     target_sigset_t d1;
128     int i;
129 
130     host_to_target_sigset_internal(&d1, s);
131     for(i = 0;i < TARGET_NSIG_WORDS; i++)
132         d->sig[i] = tswapal(d1.sig[i]);
133 }
134 
135 void target_to_host_sigset_internal(sigset_t *d,
136                                     const target_sigset_t *s)
137 {
138     int i;
139     sigemptyset(d);
140     for (i = 1; i <= TARGET_NSIG; i++) {
141         if (target_sigismember(s, i)) {
142             sigaddset(d, target_to_host_signal(i));
143         }
144     }
145 }
146 
147 void target_to_host_sigset(sigset_t *d, const target_sigset_t *s)
148 {
149     target_sigset_t s1;
150     int i;
151 
152     for(i = 0;i < TARGET_NSIG_WORDS; i++)
153         s1.sig[i] = tswapal(s->sig[i]);
154     target_to_host_sigset_internal(d, &s1);
155 }
156 
157 void host_to_target_old_sigset(abi_ulong *old_sigset,
158                                const sigset_t *sigset)
159 {
160     target_sigset_t d;
161     host_to_target_sigset(&d, sigset);
162     *old_sigset = d.sig[0];
163 }
164 
165 void target_to_host_old_sigset(sigset_t *sigset,
166                                const abi_ulong *old_sigset)
167 {
168     target_sigset_t d;
169     int i;
170 
171     d.sig[0] = *old_sigset;
172     for(i = 1;i < TARGET_NSIG_WORDS; i++)
173         d.sig[i] = 0;
174     target_to_host_sigset(sigset, &d);
175 }
176 
177 int block_signals(void)
178 {
179     TaskState *ts = (TaskState *)thread_cpu->opaque;
180     sigset_t set;
181 
182     /* It's OK to block everything including SIGSEGV, because we won't
183      * run any further guest code before unblocking signals in
184      * process_pending_signals().
185      */
186     sigfillset(&set);
187     sigprocmask(SIG_SETMASK, &set, 0);
188 
189     return atomic_xchg(&ts->signal_pending, 1);
190 }
191 
192 /* Wrapper for sigprocmask function
193  * Emulates a sigprocmask in a safe way for the guest. Note that set and oldset
194  * are host signal set, not guest ones. Returns -TARGET_ERESTARTSYS if
195  * a signal was already pending and the syscall must be restarted, or
196  * 0 on success.
197  * If set is NULL, this is guaranteed not to fail.
198  */
199 int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
200 {
201     TaskState *ts = (TaskState *)thread_cpu->opaque;
202 
203     if (oldset) {
204         *oldset = ts->signal_mask;
205     }
206 
207     if (set) {
208         int i;
209 
210         if (block_signals()) {
211             return -TARGET_ERESTARTSYS;
212         }
213 
214         switch (how) {
215         case SIG_BLOCK:
216             sigorset(&ts->signal_mask, &ts->signal_mask, set);
217             break;
218         case SIG_UNBLOCK:
219             for (i = 1; i <= NSIG; ++i) {
220                 if (sigismember(set, i)) {
221                     sigdelset(&ts->signal_mask, i);
222                 }
223             }
224             break;
225         case SIG_SETMASK:
226             ts->signal_mask = *set;
227             break;
228         default:
229             g_assert_not_reached();
230         }
231 
232         /* Silently ignore attempts to change blocking status of KILL or STOP */
233         sigdelset(&ts->signal_mask, SIGKILL);
234         sigdelset(&ts->signal_mask, SIGSTOP);
235     }
236     return 0;
237 }
238 
239 #if !defined(TARGET_NIOS2)
240 /* Just set the guest's signal mask to the specified value; the
241  * caller is assumed to have called block_signals() already.
242  */
243 void set_sigmask(const sigset_t *set)
244 {
245     TaskState *ts = (TaskState *)thread_cpu->opaque;
246 
247     ts->signal_mask = *set;
248 }
249 #endif
250 
251 /* sigaltstack management */
252 
253 int on_sig_stack(unsigned long sp)
254 {
255     return (sp - target_sigaltstack_used.ss_sp
256             < target_sigaltstack_used.ss_size);
257 }
258 
259 int sas_ss_flags(unsigned long sp)
260 {
261     return (target_sigaltstack_used.ss_size == 0 ? SS_DISABLE
262             : on_sig_stack(sp) ? SS_ONSTACK : 0);
263 }
264 
265 abi_ulong target_sigsp(abi_ulong sp, struct target_sigaction *ka)
266 {
267     /*
268      * This is the X/Open sanctioned signal stack switching.
269      */
270     if ((ka->sa_flags & TARGET_SA_ONSTACK) && !sas_ss_flags(sp)) {
271         return target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size;
272     }
273     return sp;
274 }
275 
276 void target_save_altstack(target_stack_t *uss, CPUArchState *env)
277 {
278     __put_user(target_sigaltstack_used.ss_sp, &uss->ss_sp);
279     __put_user(sas_ss_flags(get_sp_from_cpustate(env)), &uss->ss_flags);
280     __put_user(target_sigaltstack_used.ss_size, &uss->ss_size);
281 }
282 
283 /* siginfo conversion */
284 
285 static inline void host_to_target_siginfo_noswap(target_siginfo_t *tinfo,
286                                                  const siginfo_t *info)
287 {
288     int sig = host_to_target_signal(info->si_signo);
289     int si_code = info->si_code;
290     int si_type;
291     tinfo->si_signo = sig;
292     tinfo->si_errno = 0;
293     tinfo->si_code = info->si_code;
294 
295     /* This memset serves two purposes:
296      * (1) ensure we don't leak random junk to the guest later
297      * (2) placate false positives from gcc about fields
298      *     being used uninitialized if it chooses to inline both this
299      *     function and tswap_siginfo() into host_to_target_siginfo().
300      */
301     memset(tinfo->_sifields._pad, 0, sizeof(tinfo->_sifields._pad));
302 
303     /* This is awkward, because we have to use a combination of
304      * the si_code and si_signo to figure out which of the union's
305      * members are valid. (Within the host kernel it is always possible
306      * to tell, but the kernel carefully avoids giving userspace the
307      * high 16 bits of si_code, so we don't have the information to
308      * do this the easy way...) We therefore make our best guess,
309      * bearing in mind that a guest can spoof most of the si_codes
310      * via rt_sigqueueinfo() if it likes.
311      *
312      * Once we have made our guess, we record it in the top 16 bits of
313      * the si_code, so that tswap_siginfo() later can use it.
314      * tswap_siginfo() will strip these top bits out before writing
315      * si_code to the guest (sign-extending the lower bits).
316      */
317 
318     switch (si_code) {
319     case SI_USER:
320     case SI_TKILL:
321     case SI_KERNEL:
322         /* Sent via kill(), tkill() or tgkill(), or direct from the kernel.
323          * These are the only unspoofable si_code values.
324          */
325         tinfo->_sifields._kill._pid = info->si_pid;
326         tinfo->_sifields._kill._uid = info->si_uid;
327         si_type = QEMU_SI_KILL;
328         break;
329     default:
330         /* Everything else is spoofable. Make best guess based on signal */
331         switch (sig) {
332         case TARGET_SIGCHLD:
333             tinfo->_sifields._sigchld._pid = info->si_pid;
334             tinfo->_sifields._sigchld._uid = info->si_uid;
335             tinfo->_sifields._sigchld._status
336                 = host_to_target_waitstatus(info->si_status);
337             tinfo->_sifields._sigchld._utime = info->si_utime;
338             tinfo->_sifields._sigchld._stime = info->si_stime;
339             si_type = QEMU_SI_CHLD;
340             break;
341         case TARGET_SIGIO:
342             tinfo->_sifields._sigpoll._band = info->si_band;
343             tinfo->_sifields._sigpoll._fd = info->si_fd;
344             si_type = QEMU_SI_POLL;
345             break;
346         default:
347             /* Assume a sigqueue()/mq_notify()/rt_sigqueueinfo() source. */
348             tinfo->_sifields._rt._pid = info->si_pid;
349             tinfo->_sifields._rt._uid = info->si_uid;
350             /* XXX: potential problem if 64 bit */
351             tinfo->_sifields._rt._sigval.sival_ptr
352                 = (abi_ulong)(unsigned long)info->si_value.sival_ptr;
353             si_type = QEMU_SI_RT;
354             break;
355         }
356         break;
357     }
358 
359     tinfo->si_code = deposit32(si_code, 16, 16, si_type);
360 }
361 
362 void tswap_siginfo(target_siginfo_t *tinfo,
363                    const target_siginfo_t *info)
364 {
365     int si_type = extract32(info->si_code, 16, 16);
366     int si_code = sextract32(info->si_code, 0, 16);
367 
368     __put_user(info->si_signo, &tinfo->si_signo);
369     __put_user(info->si_errno, &tinfo->si_errno);
370     __put_user(si_code, &tinfo->si_code);
371 
372     /* We can use our internal marker of which fields in the structure
373      * are valid, rather than duplicating the guesswork of
374      * host_to_target_siginfo_noswap() here.
375      */
376     switch (si_type) {
377     case QEMU_SI_KILL:
378         __put_user(info->_sifields._kill._pid, &tinfo->_sifields._kill._pid);
379         __put_user(info->_sifields._kill._uid, &tinfo->_sifields._kill._uid);
380         break;
381     case QEMU_SI_TIMER:
382         __put_user(info->_sifields._timer._timer1,
383                    &tinfo->_sifields._timer._timer1);
384         __put_user(info->_sifields._timer._timer2,
385                    &tinfo->_sifields._timer._timer2);
386         break;
387     case QEMU_SI_POLL:
388         __put_user(info->_sifields._sigpoll._band,
389                    &tinfo->_sifields._sigpoll._band);
390         __put_user(info->_sifields._sigpoll._fd,
391                    &tinfo->_sifields._sigpoll._fd);
392         break;
393     case QEMU_SI_FAULT:
394         __put_user(info->_sifields._sigfault._addr,
395                    &tinfo->_sifields._sigfault._addr);
396         break;
397     case QEMU_SI_CHLD:
398         __put_user(info->_sifields._sigchld._pid,
399                    &tinfo->_sifields._sigchld._pid);
400         __put_user(info->_sifields._sigchld._uid,
401                    &tinfo->_sifields._sigchld._uid);
402         __put_user(info->_sifields._sigchld._status,
403                    &tinfo->_sifields._sigchld._status);
404         __put_user(info->_sifields._sigchld._utime,
405                    &tinfo->_sifields._sigchld._utime);
406         __put_user(info->_sifields._sigchld._stime,
407                    &tinfo->_sifields._sigchld._stime);
408         break;
409     case QEMU_SI_RT:
410         __put_user(info->_sifields._rt._pid, &tinfo->_sifields._rt._pid);
411         __put_user(info->_sifields._rt._uid, &tinfo->_sifields._rt._uid);
412         __put_user(info->_sifields._rt._sigval.sival_ptr,
413                    &tinfo->_sifields._rt._sigval.sival_ptr);
414         break;
415     default:
416         g_assert_not_reached();
417     }
418 }
419 
420 void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info)
421 {
422     target_siginfo_t tgt_tmp;
423     host_to_target_siginfo_noswap(&tgt_tmp, info);
424     tswap_siginfo(tinfo, &tgt_tmp);
425 }
426 
427 /* XXX: we support only POSIX RT signals are used. */
428 /* XXX: find a solution for 64 bit (additional malloced data is needed) */
429 void target_to_host_siginfo(siginfo_t *info, const target_siginfo_t *tinfo)
430 {
431     /* This conversion is used only for the rt_sigqueueinfo syscall,
432      * and so we know that the _rt fields are the valid ones.
433      */
434     abi_ulong sival_ptr;
435 
436     __get_user(info->si_signo, &tinfo->si_signo);
437     __get_user(info->si_errno, &tinfo->si_errno);
438     __get_user(info->si_code, &tinfo->si_code);
439     __get_user(info->si_pid, &tinfo->_sifields._rt._pid);
440     __get_user(info->si_uid, &tinfo->_sifields._rt._uid);
441     __get_user(sival_ptr, &tinfo->_sifields._rt._sigval.sival_ptr);
442     info->si_value.sival_ptr = (void *)(long)sival_ptr;
443 }
444 
445 static int fatal_signal (int sig)
446 {
447     switch (sig) {
448     case TARGET_SIGCHLD:
449     case TARGET_SIGURG:
450     case TARGET_SIGWINCH:
451         /* Ignored by default.  */
452         return 0;
453     case TARGET_SIGCONT:
454     case TARGET_SIGSTOP:
455     case TARGET_SIGTSTP:
456     case TARGET_SIGTTIN:
457     case TARGET_SIGTTOU:
458         /* Job control signals.  */
459         return 0;
460     default:
461         return 1;
462     }
463 }
464 
465 /* returns 1 if given signal should dump core if not handled */
466 static int core_dump_signal(int sig)
467 {
468     switch (sig) {
469     case TARGET_SIGABRT:
470     case TARGET_SIGFPE:
471     case TARGET_SIGILL:
472     case TARGET_SIGQUIT:
473     case TARGET_SIGSEGV:
474     case TARGET_SIGTRAP:
475     case TARGET_SIGBUS:
476         return (1);
477     default:
478         return (0);
479     }
480 }
481 
482 void signal_init(void)
483 {
484     TaskState *ts = (TaskState *)thread_cpu->opaque;
485     struct sigaction act;
486     struct sigaction oact;
487     int i, j;
488     int host_sig;
489 
490     /* generate signal conversion tables */
491     for(i = 1; i < _NSIG; i++) {
492         if (host_to_target_signal_table[i] == 0)
493             host_to_target_signal_table[i] = i;
494     }
495     for(i = 1; i < _NSIG; i++) {
496         j = host_to_target_signal_table[i];
497         target_to_host_signal_table[j] = i;
498     }
499 
500     /* Set the signal mask from the host mask. */
501     sigprocmask(0, 0, &ts->signal_mask);
502 
503     /* set all host signal handlers. ALL signals are blocked during
504        the handlers to serialize them. */
505     memset(sigact_table, 0, sizeof(sigact_table));
506 
507     sigfillset(&act.sa_mask);
508     act.sa_flags = SA_SIGINFO;
509     act.sa_sigaction = host_signal_handler;
510     for(i = 1; i <= TARGET_NSIG; i++) {
511 #ifdef TARGET_GPROF
512         if (i == SIGPROF) {
513             continue;
514         }
515 #endif
516         host_sig = target_to_host_signal(i);
517         sigaction(host_sig, NULL, &oact);
518         if (oact.sa_sigaction == (void *)SIG_IGN) {
519             sigact_table[i - 1]._sa_handler = TARGET_SIG_IGN;
520         } else if (oact.sa_sigaction == (void *)SIG_DFL) {
521             sigact_table[i - 1]._sa_handler = TARGET_SIG_DFL;
522         }
523         /* If there's already a handler installed then something has
524            gone horribly wrong, so don't even try to handle that case.  */
525         /* Install some handlers for our own use.  We need at least
526            SIGSEGV and SIGBUS, to detect exceptions.  We can not just
527            trap all signals because it affects syscall interrupt
528            behavior.  But do trap all default-fatal signals.  */
529         if (fatal_signal (i))
530             sigaction(host_sig, &act, NULL);
531     }
532 }
533 
534 /* Force a synchronously taken signal. The kernel force_sig() function
535  * also forces the signal to "not blocked, not ignored", but for QEMU
536  * that work is done in process_pending_signals().
537  */
538 void force_sig(int sig)
539 {
540     CPUState *cpu = thread_cpu;
541     CPUArchState *env = cpu->env_ptr;
542     target_siginfo_t info;
543 
544     info.si_signo = sig;
545     info.si_errno = 0;
546     info.si_code = TARGET_SI_KERNEL;
547     info._sifields._kill._pid = 0;
548     info._sifields._kill._uid = 0;
549     queue_signal(env, info.si_signo, QEMU_SI_KILL, &info);
550 }
551 
552 /* Force a SIGSEGV if we couldn't write to memory trying to set
553  * up the signal frame. oldsig is the signal we were trying to handle
554  * at the point of failure.
555  */
556 #if !defined(TARGET_RISCV)
557 void force_sigsegv(int oldsig)
558 {
559     if (oldsig == SIGSEGV) {
560         /* Make sure we don't try to deliver the signal again; this will
561          * end up with handle_pending_signal() calling dump_core_and_abort().
562          */
563         sigact_table[oldsig - 1]._sa_handler = TARGET_SIG_DFL;
564     }
565     force_sig(TARGET_SIGSEGV);
566 }
567 
568 #endif
569 
570 /* abort execution with signal */
571 static void QEMU_NORETURN dump_core_and_abort(int target_sig)
572 {
573     CPUState *cpu = thread_cpu;
574     CPUArchState *env = cpu->env_ptr;
575     TaskState *ts = (TaskState *)cpu->opaque;
576     int host_sig, core_dumped = 0;
577     struct sigaction act;
578 
579     host_sig = target_to_host_signal(target_sig);
580     trace_user_force_sig(env, target_sig, host_sig);
581     gdb_signalled(env, target_sig);
582 
583     /* dump core if supported by target binary format */
584     if (core_dump_signal(target_sig) && (ts->bprm->core_dump != NULL)) {
585         stop_all_tasks();
586         core_dumped =
587             ((*ts->bprm->core_dump)(target_sig, env) == 0);
588     }
589     if (core_dumped) {
590         /* we already dumped the core of target process, we don't want
591          * a coredump of qemu itself */
592         struct rlimit nodump;
593         getrlimit(RLIMIT_CORE, &nodump);
594         nodump.rlim_cur=0;
595         setrlimit(RLIMIT_CORE, &nodump);
596         (void) fprintf(stderr, "qemu: uncaught target signal %d (%s) - %s\n",
597             target_sig, strsignal(host_sig), "core dumped" );
598     }
599 
600     /* The proper exit code for dying from an uncaught signal is
601      * -<signal>.  The kernel doesn't allow exit() or _exit() to pass
602      * a negative value.  To get the proper exit code we need to
603      * actually die from an uncaught signal.  Here the default signal
604      * handler is installed, we send ourself a signal and we wait for
605      * it to arrive. */
606     sigfillset(&act.sa_mask);
607     act.sa_handler = SIG_DFL;
608     act.sa_flags = 0;
609     sigaction(host_sig, &act, NULL);
610 
611     /* For some reason raise(host_sig) doesn't send the signal when
612      * statically linked on x86-64. */
613     kill(getpid(), host_sig);
614 
615     /* Make sure the signal isn't masked (just reuse the mask inside
616     of act) */
617     sigdelset(&act.sa_mask, host_sig);
618     sigsuspend(&act.sa_mask);
619 
620     /* unreachable */
621     abort();
622 }
623 
624 /* queue a signal so that it will be send to the virtual CPU as soon
625    as possible */
626 int queue_signal(CPUArchState *env, int sig, int si_type,
627                  target_siginfo_t *info)
628 {
629     CPUState *cpu = ENV_GET_CPU(env);
630     TaskState *ts = cpu->opaque;
631 
632     trace_user_queue_signal(env, sig);
633 
634     info->si_code = deposit32(info->si_code, 16, 16, si_type);
635 
636     ts->sync_signal.info = *info;
637     ts->sync_signal.pending = sig;
638     /* signal that a new signal is pending */
639     atomic_set(&ts->signal_pending, 1);
640     return 1; /* indicates that the signal was queued */
641 }
642 
643 #ifndef HAVE_SAFE_SYSCALL
644 static inline void rewind_if_in_safe_syscall(void *puc)
645 {
646     /* Default version: never rewind */
647 }
648 #endif
649 
650 static void host_signal_handler(int host_signum, siginfo_t *info,
651                                 void *puc)
652 {
653     CPUArchState *env = thread_cpu->env_ptr;
654     CPUState *cpu = ENV_GET_CPU(env);
655     TaskState *ts = cpu->opaque;
656 
657     int sig;
658     target_siginfo_t tinfo;
659     ucontext_t *uc = puc;
660     struct emulated_sigtable *k;
661 
662     /* the CPU emulator uses some host signals to detect exceptions,
663        we forward to it some signals */
664     if ((host_signum == SIGSEGV || host_signum == SIGBUS)
665         && info->si_code > 0) {
666         if (cpu_signal_handler(host_signum, info, puc))
667             return;
668     }
669 
670     /* get target signal number */
671     sig = host_to_target_signal(host_signum);
672     if (sig < 1 || sig > TARGET_NSIG)
673         return;
674     trace_user_host_signal(env, host_signum, sig);
675 
676     rewind_if_in_safe_syscall(puc);
677 
678     host_to_target_siginfo_noswap(&tinfo, info);
679     k = &ts->sigtab[sig - 1];
680     k->info = tinfo;
681     k->pending = sig;
682     ts->signal_pending = 1;
683 
684     /* Block host signals until target signal handler entered. We
685      * can't block SIGSEGV or SIGBUS while we're executing guest
686      * code in case the guest code provokes one in the window between
687      * now and it getting out to the main loop. Signals will be
688      * unblocked again in process_pending_signals().
689      *
690      * WARNING: we cannot use sigfillset() here because the uc_sigmask
691      * field is a kernel sigset_t, which is much smaller than the
692      * libc sigset_t which sigfillset() operates on. Using sigfillset()
693      * would write 0xff bytes off the end of the structure and trash
694      * data on the struct.
695      * We can't use sizeof(uc->uc_sigmask) either, because the libc
696      * headers define the struct field with the wrong (too large) type.
697      */
698     memset(&uc->uc_sigmask, 0xff, SIGSET_T_SIZE);
699     sigdelset(&uc->uc_sigmask, SIGSEGV);
700     sigdelset(&uc->uc_sigmask, SIGBUS);
701 
702     /* interrupt the virtual CPU as soon as possible */
703     cpu_exit(thread_cpu);
704 }
705 
706 /* do_sigaltstack() returns target values and errnos. */
707 /* compare linux/kernel/signal.c:do_sigaltstack() */
708 abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr, abi_ulong sp)
709 {
710     int ret;
711     struct target_sigaltstack oss;
712 
713     /* XXX: test errors */
714     if(uoss_addr)
715     {
716         __put_user(target_sigaltstack_used.ss_sp, &oss.ss_sp);
717         __put_user(target_sigaltstack_used.ss_size, &oss.ss_size);
718         __put_user(sas_ss_flags(sp), &oss.ss_flags);
719     }
720 
721     if(uss_addr)
722     {
723         struct target_sigaltstack *uss;
724         struct target_sigaltstack ss;
725         size_t minstacksize = TARGET_MINSIGSTKSZ;
726 
727 #if defined(TARGET_PPC64)
728         /* ELF V2 for PPC64 has a 4K minimum stack size for signal handlers */
729         struct image_info *image = ((TaskState *)thread_cpu->opaque)->info;
730         if (get_ppc64_abi(image) > 1) {
731             minstacksize = 4096;
732         }
733 #endif
734 
735         ret = -TARGET_EFAULT;
736         if (!lock_user_struct(VERIFY_READ, uss, uss_addr, 1)) {
737             goto out;
738         }
739         __get_user(ss.ss_sp, &uss->ss_sp);
740         __get_user(ss.ss_size, &uss->ss_size);
741         __get_user(ss.ss_flags, &uss->ss_flags);
742         unlock_user_struct(uss, uss_addr, 0);
743 
744         ret = -TARGET_EPERM;
745         if (on_sig_stack(sp))
746             goto out;
747 
748         ret = -TARGET_EINVAL;
749         if (ss.ss_flags != TARGET_SS_DISABLE
750             && ss.ss_flags != TARGET_SS_ONSTACK
751             && ss.ss_flags != 0)
752             goto out;
753 
754         if (ss.ss_flags == TARGET_SS_DISABLE) {
755             ss.ss_size = 0;
756             ss.ss_sp = 0;
757         } else {
758             ret = -TARGET_ENOMEM;
759             if (ss.ss_size < minstacksize) {
760                 goto out;
761             }
762         }
763 
764         target_sigaltstack_used.ss_sp = ss.ss_sp;
765         target_sigaltstack_used.ss_size = ss.ss_size;
766     }
767 
768     if (uoss_addr) {
769         ret = -TARGET_EFAULT;
770         if (copy_to_user(uoss_addr, &oss, sizeof(oss)))
771             goto out;
772     }
773 
774     ret = 0;
775 out:
776     return ret;
777 }
778 
779 /* do_sigaction() return target values and host errnos */
780 int do_sigaction(int sig, const struct target_sigaction *act,
781                  struct target_sigaction *oact)
782 {
783     struct target_sigaction *k;
784     struct sigaction act1;
785     int host_sig;
786     int ret = 0;
787 
788     if (sig < 1 || sig > TARGET_NSIG || sig == TARGET_SIGKILL || sig == TARGET_SIGSTOP) {
789         return -TARGET_EINVAL;
790     }
791 
792     if (block_signals()) {
793         return -TARGET_ERESTARTSYS;
794     }
795 
796     k = &sigact_table[sig - 1];
797     if (oact) {
798         __put_user(k->_sa_handler, &oact->_sa_handler);
799         __put_user(k->sa_flags, &oact->sa_flags);
800 #ifdef TARGET_ARCH_HAS_SA_RESTORER
801         __put_user(k->sa_restorer, &oact->sa_restorer);
802 #endif
803         /* Not swapped.  */
804         oact->sa_mask = k->sa_mask;
805     }
806     if (act) {
807         /* FIXME: This is not threadsafe.  */
808         __get_user(k->_sa_handler, &act->_sa_handler);
809         __get_user(k->sa_flags, &act->sa_flags);
810 #ifdef TARGET_ARCH_HAS_SA_RESTORER
811         __get_user(k->sa_restorer, &act->sa_restorer);
812 #endif
813         /* To be swapped in target_to_host_sigset.  */
814         k->sa_mask = act->sa_mask;
815 
816         /* we update the host linux signal state */
817         host_sig = target_to_host_signal(sig);
818         if (host_sig != SIGSEGV && host_sig != SIGBUS) {
819             sigfillset(&act1.sa_mask);
820             act1.sa_flags = SA_SIGINFO;
821             if (k->sa_flags & TARGET_SA_RESTART)
822                 act1.sa_flags |= SA_RESTART;
823             /* NOTE: it is important to update the host kernel signal
824                ignore state to avoid getting unexpected interrupted
825                syscalls */
826             if (k->_sa_handler == TARGET_SIG_IGN) {
827                 act1.sa_sigaction = (void *)SIG_IGN;
828             } else if (k->_sa_handler == TARGET_SIG_DFL) {
829                 if (fatal_signal (sig))
830                     act1.sa_sigaction = host_signal_handler;
831                 else
832                     act1.sa_sigaction = (void *)SIG_DFL;
833             } else {
834                 act1.sa_sigaction = host_signal_handler;
835             }
836             ret = sigaction(host_sig, &act1, NULL);
837         }
838     }
839     return ret;
840 }
841 
842 static void handle_pending_signal(CPUArchState *cpu_env, int sig,
843                                   struct emulated_sigtable *k)
844 {
845     CPUState *cpu = ENV_GET_CPU(cpu_env);
846     abi_ulong handler;
847     sigset_t set;
848     target_sigset_t target_old_set;
849     struct target_sigaction *sa;
850     TaskState *ts = cpu->opaque;
851 
852     trace_user_handle_signal(cpu_env, sig);
853     /* dequeue signal */
854     k->pending = 0;
855 
856     sig = gdb_handlesig(cpu, sig);
857     if (!sig) {
858         sa = NULL;
859         handler = TARGET_SIG_IGN;
860     } else {
861         sa = &sigact_table[sig - 1];
862         handler = sa->_sa_handler;
863     }
864 
865     if (do_strace) {
866         print_taken_signal(sig, &k->info);
867     }
868 
869     if (handler == TARGET_SIG_DFL) {
870         /* default handler : ignore some signal. The other are job control or fatal */
871         if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
872             kill(getpid(),SIGSTOP);
873         } else if (sig != TARGET_SIGCHLD &&
874                    sig != TARGET_SIGURG &&
875                    sig != TARGET_SIGWINCH &&
876                    sig != TARGET_SIGCONT) {
877             dump_core_and_abort(sig);
878         }
879     } else if (handler == TARGET_SIG_IGN) {
880         /* ignore sig */
881     } else if (handler == TARGET_SIG_ERR) {
882         dump_core_and_abort(sig);
883     } else {
884         /* compute the blocked signals during the handler execution */
885         sigset_t *blocked_set;
886 
887         target_to_host_sigset(&set, &sa->sa_mask);
888         /* SA_NODEFER indicates that the current signal should not be
889            blocked during the handler */
890         if (!(sa->sa_flags & TARGET_SA_NODEFER))
891             sigaddset(&set, target_to_host_signal(sig));
892 
893         /* save the previous blocked signal state to restore it at the
894            end of the signal execution (see do_sigreturn) */
895         host_to_target_sigset_internal(&target_old_set, &ts->signal_mask);
896 
897         /* block signals in the handler */
898         blocked_set = ts->in_sigsuspend ?
899             &ts->sigsuspend_mask : &ts->signal_mask;
900         sigorset(&ts->signal_mask, blocked_set, &set);
901         ts->in_sigsuspend = 0;
902 
903         /* if the CPU is in VM86 mode, we restore the 32 bit values */
904 #if defined(TARGET_I386) && !defined(TARGET_X86_64)
905         {
906             CPUX86State *env = cpu_env;
907             if (env->eflags & VM_MASK)
908                 save_v86_state(env);
909         }
910 #endif
911         /* prepare the stack frame of the virtual CPU */
912 #if defined(TARGET_ARCH_HAS_SETUP_FRAME)
913         if (sa->sa_flags & TARGET_SA_SIGINFO) {
914             setup_rt_frame(sig, sa, &k->info, &target_old_set, cpu_env);
915         } else {
916             setup_frame(sig, sa, &target_old_set, cpu_env);
917         }
918 #else
919         /* These targets do not have traditional signals.  */
920         setup_rt_frame(sig, sa, &k->info, &target_old_set, cpu_env);
921 #endif
922         if (sa->sa_flags & TARGET_SA_RESETHAND) {
923             sa->_sa_handler = TARGET_SIG_DFL;
924         }
925     }
926 }
927 
928 void process_pending_signals(CPUArchState *cpu_env)
929 {
930     CPUState *cpu = ENV_GET_CPU(cpu_env);
931     int sig;
932     TaskState *ts = cpu->opaque;
933     sigset_t set;
934     sigset_t *blocked_set;
935 
936     while (atomic_read(&ts->signal_pending)) {
937         /* FIXME: This is not threadsafe.  */
938         sigfillset(&set);
939         sigprocmask(SIG_SETMASK, &set, 0);
940 
941     restart_scan:
942         sig = ts->sync_signal.pending;
943         if (sig) {
944             /* Synchronous signals are forced,
945              * see force_sig_info() and callers in Linux
946              * Note that not all of our queue_signal() calls in QEMU correspond
947              * to force_sig_info() calls in Linux (some are send_sig_info()).
948              * However it seems like a kernel bug to me to allow the process
949              * to block a synchronous signal since it could then just end up
950              * looping round and round indefinitely.
951              */
952             if (sigismember(&ts->signal_mask, target_to_host_signal_table[sig])
953                 || sigact_table[sig - 1]._sa_handler == TARGET_SIG_IGN) {
954                 sigdelset(&ts->signal_mask, target_to_host_signal_table[sig]);
955                 sigact_table[sig - 1]._sa_handler = TARGET_SIG_DFL;
956             }
957 
958             handle_pending_signal(cpu_env, sig, &ts->sync_signal);
959         }
960 
961         for (sig = 1; sig <= TARGET_NSIG; sig++) {
962             blocked_set = ts->in_sigsuspend ?
963                 &ts->sigsuspend_mask : &ts->signal_mask;
964 
965             if (ts->sigtab[sig - 1].pending &&
966                 (!sigismember(blocked_set,
967                               target_to_host_signal_table[sig]))) {
968                 handle_pending_signal(cpu_env, sig, &ts->sigtab[sig - 1]);
969                 /* Restart scan from the beginning, as handle_pending_signal
970                  * might have resulted in a new synchronous signal (eg SIGSEGV).
971                  */
972                 goto restart_scan;
973             }
974         }
975 
976         /* if no signal is pending, unblock signals and recheck (the act
977          * of unblocking might cause us to take another host signal which
978          * will set signal_pending again).
979          */
980         atomic_set(&ts->signal_pending, 0);
981         ts->in_sigsuspend = 0;
982         set = ts->signal_mask;
983         sigdelset(&set, SIGSEGV);
984         sigdelset(&set, SIGBUS);
985         sigprocmask(SIG_SETMASK, &set, 0);
986     }
987     ts->in_sigsuspend = 0;
988 }
989