diff options
Diffstat (limited to 'arch/x86/ia32/ia32_signal.c')
-rw-r--r-- | arch/x86/ia32/ia32_signal.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c index 5563ba1cf513..8ff8e7ddfc55 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c | |||
@@ -12,10 +12,8 @@ | |||
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/signal.h> | ||
16 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
17 | #include <linux/wait.h> | 16 | #include <linux/wait.h> |
18 | #include <linux/ptrace.h> | ||
19 | #include <linux/unistd.h> | 17 | #include <linux/unistd.h> |
20 | #include <linux/stddef.h> | 18 | #include <linux/stddef.h> |
21 | #include <linux/personality.h> | 19 | #include <linux/personality.h> |
@@ -32,20 +30,15 @@ | |||
32 | #include <asm/proto.h> | 30 | #include <asm/proto.h> |
33 | #include <asm/vdso.h> | 31 | #include <asm/vdso.h> |
34 | #include <asm/sigframe.h> | 32 | #include <asm/sigframe.h> |
33 | #include <asm/sighandling.h> | ||
35 | #include <asm/sys_ia32.h> | 34 | #include <asm/sys_ia32.h> |
36 | 35 | ||
37 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 36 | #define FIX_EFLAGS __FIX_EFLAGS |
38 | |||
39 | #define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | \ | ||
40 | X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \ | ||
41 | X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \ | ||
42 | X86_EFLAGS_CF) | ||
43 | |||
44 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where); | ||
45 | 37 | ||
46 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | 38 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) |
47 | { | 39 | { |
48 | int err = 0; | 40 | int err = 0; |
41 | bool ia32 = is_ia32_task(); | ||
49 | 42 | ||
50 | if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t))) | 43 | if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t))) |
51 | return -EFAULT; | 44 | return -EFAULT; |
@@ -75,8 +68,13 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | |||
75 | case __SI_FAULT >> 16: | 68 | case __SI_FAULT >> 16: |
76 | break; | 69 | break; |
77 | case __SI_CHLD >> 16: | 70 | case __SI_CHLD >> 16: |
78 | put_user_ex(from->si_utime, &to->si_utime); | 71 | if (ia32) { |
79 | put_user_ex(from->si_stime, &to->si_stime); | 72 | put_user_ex(from->si_utime, &to->si_utime); |
73 | put_user_ex(from->si_stime, &to->si_stime); | ||
74 | } else { | ||
75 | put_user_ex(from->si_utime, &to->_sifields._sigchld_x32._utime); | ||
76 | put_user_ex(from->si_stime, &to->_sifields._sigchld_x32._stime); | ||
77 | } | ||
80 | put_user_ex(from->si_status, &to->si_status); | 78 | put_user_ex(from->si_status, &to->si_status); |
81 | /* FALL THROUGH */ | 79 | /* FALL THROUGH */ |
82 | default: | 80 | default: |