diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 21:50:11 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 21:50:11 -0500 |
commit | 9e2d59ad580d590134285f361a0e80f0e98c0207 (patch) | |
tree | f3232be75781484193413f32ec82c21f6d8eb76e /arch/parisc | |
parent | 5ce1a70e2f00f0bce0cab57f798ca354b9496169 (diff) | |
parent | 235b80226b986dabcbba844968f7807866bd0bfe (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull signal handling cleanups from Al Viro:
"This is the first pile; another one will come a bit later and will
contain SYSCALL_DEFINE-related patches.
- a bunch of signal-related syscalls (both native and compat)
unified.
- a bunch of compat syscalls switched to COMPAT_SYSCALL_DEFINE
(fixing several potential problems with missing argument
validation, while we are at it)
- a lot of now-pointless wrappers killed
- a couple of architectures (cris and hexagon) forgot to save
altstack settings into sigframe, even though they used the
(uninitialized) values in sigreturn; fixed.
- microblaze fixes for delivery of multiple signals arriving at once
- saner set of helpers for signal delivery introduced, several
architectures switched to using those."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal: (143 commits)
x86: convert to ksignal
sparc: convert to ksignal
arm: switch to struct ksignal * passing
alpha: pass k_sigaction and siginfo_t using ksignal pointer
burying unused conditionals
make do_sigaltstack() static
arm64: switch to generic old sigaction() (compat-only)
arm64: switch to generic compat rt_sigaction()
arm64: switch compat to generic old sigsuspend
arm64: switch to generic compat rt_sigqueueinfo()
arm64: switch to generic compat rt_sigpending()
arm64: switch to generic compat rt_sigprocmask()
arm64: switch to generic sigaltstack
sparc: switch to generic old sigsuspend
sparc: COMPAT_SYSCALL_DEFINE does all sign-extension as well as SYSCALL_DEFINE
sparc: kill sign-extending wrappers for native syscalls
kill sparc32_open()
sparc: switch to use of generic old sigaction
sparc: switch sys_compat_rt_sigaction() to COMPAT_SYSCALL_DEFINE
mips: switch to generic sys_fork() and sys_clone()
...
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/include/asm/signal.h | 6 | ||||
-rw-r--r-- | arch/parisc/include/asm/unistd.h | 3 | ||||
-rw-r--r-- | arch/parisc/kernel/entry.S | 38 | ||||
-rw-r--r-- | arch/parisc/kernel/signal.c | 19 | ||||
-rw-r--r-- | arch/parisc/kernel/signal32.c | 149 | ||||
-rw-r--r-- | arch/parisc/kernel/signal32.h | 23 | ||||
-rw-r--r-- | arch/parisc/kernel/sys32.h | 12 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall_table.S | 8 |
8 files changed, 10 insertions, 248 deletions
diff --git a/arch/parisc/include/asm/signal.h b/arch/parisc/include/asm/signal.h index b1a7c4c4a53a..81a545773971 100644 --- a/arch/parisc/include/asm/signal.h +++ b/arch/parisc/include/asm/signal.h | |||
@@ -20,15 +20,13 @@ typedef struct { | |||
20 | unsigned long sig[_NSIG_WORDS]; | 20 | unsigned long sig[_NSIG_WORDS]; |
21 | } sigset_t; | 21 | } sigset_t; |
22 | 22 | ||
23 | #ifndef __KERNEL__ | ||
23 | struct sigaction { | 24 | struct sigaction { |
24 | __sighandler_t sa_handler; | 25 | __sighandler_t sa_handler; |
25 | unsigned long sa_flags; | 26 | unsigned long sa_flags; |
26 | sigset_t sa_mask; /* mask last for extensibility */ | 27 | sigset_t sa_mask; /* mask last for extensibility */ |
27 | }; | 28 | }; |
28 | 29 | #endif | |
29 | struct k_sigaction { | ||
30 | struct sigaction sa; | ||
31 | }; | ||
32 | 30 | ||
33 | #include <asm/sigcontext.h> | 31 | #include <asm/sigcontext.h> |
34 | 32 | ||
diff --git a/arch/parisc/include/asm/unistd.h b/arch/parisc/include/asm/unistd.h index 74f801ebbe77..ae9a46cbfd92 100644 --- a/arch/parisc/include/asm/unistd.h +++ b/arch/parisc/include/asm/unistd.h | |||
@@ -161,9 +161,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | |||
161 | #define __ARCH_WANT_SYS_OLDUMOUNT | 161 | #define __ARCH_WANT_SYS_OLDUMOUNT |
162 | #define __ARCH_WANT_SYS_SIGPENDING | 162 | #define __ARCH_WANT_SYS_SIGPENDING |
163 | #define __ARCH_WANT_SYS_SIGPROCMASK | 163 | #define __ARCH_WANT_SYS_SIGPROCMASK |
164 | #define __ARCH_WANT_SYS_RT_SIGACTION | ||
165 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
166 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | ||
167 | #define __ARCH_WANT_SYS_FORK | 164 | #define __ARCH_WANT_SYS_FORK |
168 | #define __ARCH_WANT_SYS_VFORK | 165 | #define __ARCH_WANT_SYS_VFORK |
169 | #define __ARCH_WANT_SYS_CLONE | 166 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 7c9648919c91..f33201bf8977 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
@@ -1748,44 +1748,6 @@ ENTRY(sys_rt_sigreturn_wrapper) | |||
1748 | LDREG PT_GR28(%r1),%r28 /* reload original r28 for syscall_exit */ | 1748 | LDREG PT_GR28(%r1),%r28 /* reload original r28 for syscall_exit */ |
1749 | ENDPROC(sys_rt_sigreturn_wrapper) | 1749 | ENDPROC(sys_rt_sigreturn_wrapper) |
1750 | 1750 | ||
1751 | ENTRY(sys_sigaltstack_wrapper) | ||
1752 | /* Get the user stack pointer */ | ||
1753 | LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 | ||
1754 | ldo TASK_REGS(%r1),%r24 /* get pt regs */ | ||
1755 | LDREG TASK_PT_GR30(%r24),%r24 | ||
1756 | STREG %r2, -RP_OFFSET(%r30) | ||
1757 | #ifdef CONFIG_64BIT | ||
1758 | ldo FRAME_SIZE(%r30), %r30 | ||
1759 | BL do_sigaltstack,%r2 | ||
1760 | ldo -16(%r30),%r29 /* Reference param save area */ | ||
1761 | #else | ||
1762 | BL do_sigaltstack,%r2 | ||
1763 | ldo FRAME_SIZE(%r30), %r30 | ||
1764 | #endif | ||
1765 | |||
1766 | ldo -FRAME_SIZE(%r30), %r30 | ||
1767 | LDREG -RP_OFFSET(%r30), %r2 | ||
1768 | bv %r0(%r2) | ||
1769 | nop | ||
1770 | ENDPROC(sys_sigaltstack_wrapper) | ||
1771 | |||
1772 | #ifdef CONFIG_64BIT | ||
1773 | ENTRY(sys32_sigaltstack_wrapper) | ||
1774 | /* Get the user stack pointer */ | ||
1775 | LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r24 | ||
1776 | LDREG TASK_PT_GR30(%r24),%r24 | ||
1777 | STREG %r2, -RP_OFFSET(%r30) | ||
1778 | ldo FRAME_SIZE(%r30), %r30 | ||
1779 | BL do_sigaltstack32,%r2 | ||
1780 | ldo -16(%r30),%r29 /* Reference param save area */ | ||
1781 | |||
1782 | ldo -FRAME_SIZE(%r30), %r30 | ||
1783 | LDREG -RP_OFFSET(%r30), %r2 | ||
1784 | bv %r0(%r2) | ||
1785 | nop | ||
1786 | ENDPROC(sys32_sigaltstack_wrapper) | ||
1787 | #endif | ||
1788 | |||
1789 | ENTRY(syscall_exit) | 1751 | ENTRY(syscall_exit) |
1790 | /* NOTE: HP-UX syscalls also come through here | 1752 | /* NOTE: HP-UX syscalls also come through here |
1791 | * after hpux_syscall_exit fixes up return | 1753 | * after hpux_syscall_exit fixes up return |
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 52c85b2f502e..98e9e7126565 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c | |||
@@ -143,7 +143,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall) | |||
143 | goto give_sigsegv; | 143 | goto give_sigsegv; |
144 | DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", | 144 | DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", |
145 | usp, &compat_frame->uc.uc_stack); | 145 | usp, &compat_frame->uc.uc_stack); |
146 | if (do_sigaltstack32(&compat_frame->uc.uc_stack, NULL, usp) == -EFAULT) | 146 | if (compat_restore_altstack(&compat_frame->uc.uc_stack)) |
147 | goto give_sigsegv; | 147 | goto give_sigsegv; |
148 | } else | 148 | } else |
149 | #endif | 149 | #endif |
@@ -154,7 +154,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall) | |||
154 | goto give_sigsegv; | 154 | goto give_sigsegv; |
155 | DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", | 155 | DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", |
156 | usp, &frame->uc.uc_stack); | 156 | usp, &frame->uc.uc_stack); |
157 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, usp) == -EFAULT) | 157 | if (restore_altstack(&frame->uc.uc_stack)) |
158 | goto give_sigsegv; | 158 | goto give_sigsegv; |
159 | } | 159 | } |
160 | 160 | ||
@@ -262,15 +262,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
262 | if (is_compat_task()) { | 262 | if (is_compat_task()) { |
263 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); | 263 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); |
264 | err |= copy_siginfo_to_user32(&compat_frame->info, info); | 264 | err |= copy_siginfo_to_user32(&compat_frame->info, info); |
265 | DBG(1,"SETUP_RT_FRAME: 1\n"); | 265 | err |= __compat_save_altstack( &compat_frame->uc.uc_stack, regs->gr[30]); |
266 | compat_val = (compat_int_t)current->sas_ss_sp; | ||
267 | err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); | ||
268 | DBG(1,"SETUP_RT_FRAME: 2\n"); | ||
269 | compat_val = (compat_int_t)current->sas_ss_size; | ||
270 | err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_size); | ||
271 | DBG(1,"SETUP_RT_FRAME: 3\n"); | ||
272 | compat_val = sas_ss_flags(regs->gr[30]); | ||
273 | err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_flags); | ||
274 | DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &compat_frame->uc); | 266 | DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &compat_frame->uc); |
275 | DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &compat_frame->uc.uc_mcontext); | 267 | DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &compat_frame->uc.uc_mcontext); |
276 | err |= setup_sigcontext32(&compat_frame->uc.uc_mcontext, | 268 | err |= setup_sigcontext32(&compat_frame->uc.uc_mcontext, |
@@ -282,10 +274,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
282 | { | 274 | { |
283 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &frame->info); | 275 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &frame->info); |
284 | err |= copy_siginfo_to_user(&frame->info, info); | 276 | err |= copy_siginfo_to_user(&frame->info, info); |
285 | err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 277 | err |= __save_altstack(&frame->uc.uc_stack, regs->gr[30]); |
286 | err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
287 | err |= __put_user(sas_ss_flags(regs->gr[30]), | ||
288 | &frame->uc.uc_stack.ss_flags); | ||
289 | DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &frame->uc); | 278 | DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &frame->uc); |
290 | DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &frame->uc.uc_mcontext); | 279 | DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &frame->uc.uc_mcontext); |
291 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, in_syscall); | 280 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, in_syscall); |
diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c index 2ddcabb616ce..33eca1b04926 100644 --- a/arch/parisc/kernel/signal32.c +++ b/arch/parisc/kernel/signal32.c | |||
@@ -60,136 +60,6 @@ sigset_64to32(compat_sigset_t *s32, sigset_t *s64) | |||
60 | s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL; | 60 | s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL; |
61 | } | 61 | } |
62 | 62 | ||
63 | static int | ||
64 | put_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz) | ||
65 | { | ||
66 | compat_sigset_t s; | ||
67 | |||
68 | if (sz != sizeof(compat_sigset_t)) | ||
69 | return -EINVAL; | ||
70 | sigset_64to32(&s, set); | ||
71 | |||
72 | return copy_to_user(up, &s, sizeof s); | ||
73 | } | ||
74 | |||
75 | static int | ||
76 | get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz) | ||
77 | { | ||
78 | compat_sigset_t s; | ||
79 | int r; | ||
80 | |||
81 | if (sz != sizeof(compat_sigset_t)) | ||
82 | return -EINVAL; | ||
83 | |||
84 | if ((r = copy_from_user(&s, up, sz)) == 0) { | ||
85 | sigset_32to64(set, &s); | ||
86 | } | ||
87 | |||
88 | return r; | ||
89 | } | ||
90 | |||
91 | int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, compat_sigset_t __user *oset, | ||
92 | unsigned int sigsetsize) | ||
93 | { | ||
94 | sigset_t old_set, new_set; | ||
95 | int ret; | ||
96 | |||
97 | if (set) { | ||
98 | ret = get_sigset32(set, &new_set, sigsetsize); | ||
99 | if (ret) | ||
100 | return ret; | ||
101 | } | ||
102 | |||
103 | KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? (sigset_t __user *)&new_set : NULL, | ||
104 | oset ? (sigset_t __user *)&old_set : NULL, sigsetsize); | ||
105 | |||
106 | if (!ret && oset && put_sigset32(oset, &old_set, sigsetsize)) | ||
107 | return -EFAULT; | ||
108 | |||
109 | return ret; | ||
110 | } | ||
111 | |||
112 | |||
113 | int sys32_rt_sigpending(compat_sigset_t __user *uset, unsigned int sigsetsize) | ||
114 | { | ||
115 | int ret; | ||
116 | sigset_t set; | ||
117 | |||
118 | KERNEL_SYSCALL(ret, sys_rt_sigpending, (sigset_t __user *)&set, sigsetsize); | ||
119 | |||
120 | if (!ret && put_sigset32(uset, &set, sigsetsize)) | ||
121 | return -EFAULT; | ||
122 | |||
123 | return ret; | ||
124 | } | ||
125 | |||
126 | long | ||
127 | sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigaction32 __user *oact, | ||
128 | size_t sigsetsize) | ||
129 | { | ||
130 | struct k_sigaction32 new_sa32, old_sa32; | ||
131 | struct k_sigaction new_sa, old_sa; | ||
132 | int ret = -EINVAL; | ||
133 | |||
134 | /* XXX: Don't preclude handling different sized sigset_t's. */ | ||
135 | if (sigsetsize != sizeof(compat_sigset_t)) | ||
136 | return -EINVAL; | ||
137 | |||
138 | if (act) { | ||
139 | if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa)) | ||
140 | return -EFAULT; | ||
141 | new_sa.sa.sa_handler = (__sighandler_t)(unsigned long)new_sa32.sa.sa_handler; | ||
142 | new_sa.sa.sa_flags = new_sa32.sa.sa_flags; | ||
143 | sigset_32to64(&new_sa.sa.sa_mask, &new_sa32.sa.sa_mask); | ||
144 | } | ||
145 | |||
146 | ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL); | ||
147 | |||
148 | if (!ret && oact) { | ||
149 | sigset_64to32(&old_sa32.sa.sa_mask, &old_sa.sa.sa_mask); | ||
150 | old_sa32.sa.sa_flags = old_sa.sa.sa_flags; | ||
151 | old_sa32.sa.sa_handler = (__sighandler_t32)(unsigned long)old_sa.sa.sa_handler; | ||
152 | if (copy_to_user(oact, &old_sa32.sa, sizeof old_sa32.sa)) | ||
153 | return -EFAULT; | ||
154 | } | ||
155 | return ret; | ||
156 | } | ||
157 | |||
158 | int | ||
159 | do_sigaltstack32 (const compat_stack_t __user *uss32, compat_stack_t __user *uoss32, unsigned long sp) | ||
160 | { | ||
161 | compat_stack_t ss32, oss32; | ||
162 | stack_t ss, oss; | ||
163 | stack_t *ssp = NULL, *ossp = NULL; | ||
164 | int ret; | ||
165 | |||
166 | if (uss32) { | ||
167 | if (copy_from_user(&ss32, uss32, sizeof ss32)) | ||
168 | return -EFAULT; | ||
169 | |||
170 | ss.ss_sp = (void __user *)(unsigned long)ss32.ss_sp; | ||
171 | ss.ss_flags = ss32.ss_flags; | ||
172 | ss.ss_size = ss32.ss_size; | ||
173 | |||
174 | ssp = &ss; | ||
175 | } | ||
176 | |||
177 | if (uoss32) | ||
178 | ossp = &oss; | ||
179 | |||
180 | KERNEL_SYSCALL(ret, do_sigaltstack, (const stack_t __user *)ssp, (stack_t __user *)ossp, sp); | ||
181 | |||
182 | if (!ret && uoss32) { | ||
183 | oss32.ss_sp = (unsigned int)(unsigned long)oss.ss_sp; | ||
184 | oss32.ss_flags = oss.ss_flags; | ||
185 | oss32.ss_size = oss.ss_size; | ||
186 | if (copy_to_user(uoss32, &oss32, sizeof *uoss32)) | ||
187 | return -EFAULT; | ||
188 | } | ||
189 | |||
190 | return ret; | ||
191 | } | ||
192 | |||
193 | long | 63 | long |
194 | restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf, | 64 | restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf, |
195 | struct pt_regs *regs) | 65 | struct pt_regs *regs) |
@@ -506,22 +376,3 @@ copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from) | |||
506 | } | 376 | } |
507 | return err; | 377 | return err; |
508 | } | 378 | } |
509 | |||
510 | asmlinkage long compat_sys_rt_sigqueueinfo(int pid, int sig, | ||
511 | struct compat_siginfo __user *uinfo) | ||
512 | { | ||
513 | siginfo_t info; | ||
514 | |||
515 | if (copy_siginfo_from_user32(&info, uinfo)) | ||
516 | return -EFAULT; | ||
517 | |||
518 | /* Not even root can pretend to send signals from the kernel. | ||
519 | Nor can they impersonate a kill(), which adds source info. */ | ||
520 | if (info.si_code >= 0) | ||
521 | return -EPERM; | ||
522 | info.si_signo = sig; | ||
523 | |||
524 | /* POSIX.1b doesn't mention process groups. */ | ||
525 | return kill_proc_info(sig, &info, pid); | ||
526 | } | ||
527 | |||
diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h index 08a88b5349a2..72ab41a51f32 100644 --- a/arch/parisc/kernel/signal32.h +++ b/arch/parisc/kernel/signal32.h | |||
@@ -21,23 +21,6 @@ | |||
21 | 21 | ||
22 | #include <linux/compat.h> | 22 | #include <linux/compat.h> |
23 | 23 | ||
24 | typedef compat_uptr_t compat_sighandler_t; | ||
25 | |||
26 | typedef struct compat_sigaltstack { | ||
27 | compat_uptr_t ss_sp; | ||
28 | compat_int_t ss_flags; | ||
29 | compat_size_t ss_size; | ||
30 | } compat_stack_t; | ||
31 | |||
32 | /* Most things should be clean enough to redefine this at will, if care | ||
33 | is taken to make libc match. */ | ||
34 | |||
35 | struct compat_sigaction { | ||
36 | compat_sighandler_t sa_handler; | ||
37 | compat_uint_t sa_flags; | ||
38 | compat_sigset_t sa_mask; /* mask last for extensibility */ | ||
39 | }; | ||
40 | |||
41 | /* 32-bit ucontext as seen from an 64-bit kernel */ | 24 | /* 32-bit ucontext as seen from an 64-bit kernel */ |
42 | struct compat_ucontext { | 25 | struct compat_ucontext { |
43 | compat_uint_t uc_flags; | 26 | compat_uint_t uc_flags; |
@@ -51,10 +34,6 @@ struct compat_ucontext { | |||
51 | 34 | ||
52 | /* ELF32 signal handling */ | 35 | /* ELF32 signal handling */ |
53 | 36 | ||
54 | struct k_sigaction32 { | ||
55 | struct compat_sigaction sa; | ||
56 | }; | ||
57 | |||
58 | int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from); | 37 | int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from); |
59 | int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from); | 38 | int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from); |
60 | 39 | ||
@@ -102,8 +81,6 @@ struct compat_rt_sigframe { | |||
102 | 81 | ||
103 | void sigset_32to64(sigset_t *s64, compat_sigset_t *s32); | 82 | void sigset_32to64(sigset_t *s64, compat_sigset_t *s32); |
104 | void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); | 83 | void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); |
105 | int do_sigaltstack32 (const compat_stack_t __user *uss32, | ||
106 | compat_stack_t __user *uoss32, unsigned long sp); | ||
107 | long restore_sigcontext32(struct compat_sigcontext __user *sc, | 84 | long restore_sigcontext32(struct compat_sigcontext __user *sc, |
108 | struct compat_regfile __user *rf, | 85 | struct compat_regfile __user *rf, |
109 | struct pt_regs *regs); | 86 | struct pt_regs *regs); |
diff --git a/arch/parisc/kernel/sys32.h b/arch/parisc/kernel/sys32.h index 06c2090cfaba..60dd470f39f8 100644 --- a/arch/parisc/kernel/sys32.h +++ b/arch/parisc/kernel/sys32.h | |||
@@ -33,16 +33,4 @@ | |||
33 | set_fs (old_fs); \ | 33 | set_fs (old_fs); \ |
34 | } | 34 | } |
35 | 35 | ||
36 | #ifdef CONFIG_COMPAT | ||
37 | |||
38 | typedef __u32 __sighandler_t32; | ||
39 | |||
40 | struct sigaction32 { | ||
41 | __sighandler_t32 sa_handler; | ||
42 | unsigned int sa_flags; | ||
43 | compat_sigset_t sa_mask; /* mask last for extensibility */ | ||
44 | }; | ||
45 | |||
46 | #endif | ||
47 | |||
48 | #endif | 36 | #endif |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 129fd472c471..fc9cab1cc2df 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -252,7 +252,7 @@ | |||
252 | ENTRY_SAME(mremap) | 252 | ENTRY_SAME(mremap) |
253 | ENTRY_SAME(setresuid) | 253 | ENTRY_SAME(setresuid) |
254 | ENTRY_SAME(getresuid) /* 165 */ | 254 | ENTRY_SAME(getresuid) /* 165 */ |
255 | ENTRY_DIFF(sigaltstack_wrapper) | 255 | ENTRY_COMP(sigaltstack) |
256 | ENTRY_SAME(ni_syscall) /* query_module */ | 256 | ENTRY_SAME(ni_syscall) /* query_module */ |
257 | ENTRY_SAME(poll) | 257 | ENTRY_SAME(poll) |
258 | /* structs contain pointers and an in_addr... */ | 258 | /* structs contain pointers and an in_addr... */ |
@@ -262,9 +262,9 @@ | |||
262 | ENTRY_SAME(prctl) | 262 | ENTRY_SAME(prctl) |
263 | /* signals need a careful review */ | 263 | /* signals need a careful review */ |
264 | ENTRY_SAME(rt_sigreturn_wrapper) | 264 | ENTRY_SAME(rt_sigreturn_wrapper) |
265 | ENTRY_DIFF(rt_sigaction) | 265 | ENTRY_COMP(rt_sigaction) |
266 | ENTRY_DIFF(rt_sigprocmask) /* 175 */ | 266 | ENTRY_COMP(rt_sigprocmask) /* 175 */ |
267 | ENTRY_DIFF(rt_sigpending) | 267 | ENTRY_COMP(rt_sigpending) |
268 | ENTRY_COMP(rt_sigtimedwait) | 268 | ENTRY_COMP(rt_sigtimedwait) |
269 | /* even though the struct siginfo_t is different, it appears like | 269 | /* even though the struct siginfo_t is different, it appears like |
270 | * all the paths use values which should be same wide and narrow. | 270 | * all the paths use values which should be same wide and narrow. |