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