diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-25 14:46:17 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 18:16:25 -0500 |
commit | f45adb0499dedd4082b46522e7b166cff5dc64eb (patch) | |
tree | e9a3ae4c437a6e16f7f359113af401c6c4ba4cec /arch/x86 | |
parent | 49cb25e92902ba24bd38c350114f8695493b262f (diff) |
x86: switch to generic compat rt_sigpending()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/ia32/sys_ia32.c | 24 | ||||
-rw-r--r-- | arch/x86/include/asm/sys_ia32.h | 1 | ||||
-rw-r--r-- | arch/x86/syscalls/syscall_32.tbl | 2 | ||||
-rw-r--r-- | arch/x86/syscalls/syscall_64.tbl | 2 |
5 files changed, 3 insertions, 27 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 79795af59810..38018ecc74f6 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -114,6 +114,7 @@ config X86 | |||
114 | select MODULES_USE_ELF_RELA if X86_64 | 114 | select MODULES_USE_ELF_RELA if X86_64 |
115 | select CLONE_BACKWARDS if X86_32 | 115 | select CLONE_BACKWARDS if X86_32 |
116 | select GENERIC_SIGALTSTACK | 116 | select GENERIC_SIGALTSTACK |
117 | select GENERIC_COMPAT_RT_SIGPENDING | ||
117 | 118 | ||
118 | config INSTRUCTION_DECODER | 119 | config INSTRUCTION_DECODER |
119 | def_bool y | 120 | def_bool y |
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c index d0b689ba7be2..b417fc1c7690 100644 --- a/arch/x86/ia32/sys_ia32.c +++ b/arch/x86/ia32/sys_ia32.c | |||
@@ -310,30 +310,6 @@ asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid, | |||
310 | return ret; | 310 | return ret; |
311 | } | 311 | } |
312 | 312 | ||
313 | asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set, | ||
314 | compat_size_t sigsetsize) | ||
315 | { | ||
316 | sigset_t s; | ||
317 | compat_sigset_t s32; | ||
318 | int ret; | ||
319 | mm_segment_t old_fs = get_fs(); | ||
320 | |||
321 | set_fs(KERNEL_DS); | ||
322 | ret = sys_rt_sigpending((sigset_t __user *)&s, sigsetsize); | ||
323 | set_fs(old_fs); | ||
324 | if (!ret) { | ||
325 | switch (_NSIG_WORDS) { | ||
326 | case 4: s32.sig[7] = (s.sig[3] >> 32); s32.sig[6] = s.sig[3]; | ||
327 | case 3: s32.sig[5] = (s.sig[2] >> 32); s32.sig[4] = s.sig[2]; | ||
328 | case 2: s32.sig[3] = (s.sig[1] >> 32); s32.sig[2] = s.sig[1]; | ||
329 | case 1: s32.sig[1] = (s.sig[0] >> 32); s32.sig[0] = s.sig[0]; | ||
330 | } | ||
331 | if (copy_to_user(set, &s32, sizeof(compat_sigset_t))) | ||
332 | return -EFAULT; | ||
333 | } | ||
334 | return ret; | ||
335 | } | ||
336 | |||
337 | asmlinkage long sys32_rt_sigqueueinfo(int pid, int sig, | 313 | asmlinkage long sys32_rt_sigqueueinfo(int pid, int sig, |
338 | compat_siginfo_t __user *uinfo) | 314 | compat_siginfo_t __user *uinfo) |
339 | { | 315 | { |
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h index 93e142a719bc..ff429b02c256 100644 --- a/arch/x86/include/asm/sys_ia32.h +++ b/arch/x86/include/asm/sys_ia32.h | |||
@@ -45,7 +45,6 @@ asmlinkage long sys32_sysfs(int, u32, u32); | |||
45 | 45 | ||
46 | asmlinkage long sys32_sched_rr_get_interval(compat_pid_t, | 46 | asmlinkage long sys32_sched_rr_get_interval(compat_pid_t, |
47 | struct compat_timespec __user *); | 47 | struct compat_timespec __user *); |
48 | asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t); | ||
49 | asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); | 48 | asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); |
50 | 49 | ||
51 | asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); | 50 | asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); |
diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl index 250e2d990598..5a55e84f4d04 100644 --- a/arch/x86/syscalls/syscall_32.tbl +++ b/arch/x86/syscalls/syscall_32.tbl | |||
@@ -182,7 +182,7 @@ | |||
182 | 173 i386 rt_sigreturn sys_rt_sigreturn stub32_rt_sigreturn | 182 | 173 i386 rt_sigreturn sys_rt_sigreturn stub32_rt_sigreturn |
183 | 174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction | 183 | 174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction |
184 | 175 i386 rt_sigprocmask sys_rt_sigprocmask | 184 | 175 i386 rt_sigprocmask sys_rt_sigprocmask |
185 | 176 i386 rt_sigpending sys_rt_sigpending sys32_rt_sigpending | 185 | 176 i386 rt_sigpending sys_rt_sigpending compat_sys_rt_sigpending |
186 | 177 i386 rt_sigtimedwait sys_rt_sigtimedwait compat_sys_rt_sigtimedwait | 186 | 177 i386 rt_sigtimedwait sys_rt_sigtimedwait compat_sys_rt_sigtimedwait |
187 | 178 i386 rt_sigqueueinfo sys_rt_sigqueueinfo sys32_rt_sigqueueinfo | 187 | 178 i386 rt_sigqueueinfo sys_rt_sigqueueinfo sys32_rt_sigqueueinfo |
188 | 179 i386 rt_sigsuspend sys_rt_sigsuspend | 188 | 179 i386 rt_sigsuspend sys_rt_sigsuspend |
diff --git a/arch/x86/syscalls/syscall_64.tbl b/arch/x86/syscalls/syscall_64.tbl index dc97328bd90a..dbde26d7d528 100644 --- a/arch/x86/syscalls/syscall_64.tbl +++ b/arch/x86/syscalls/syscall_64.tbl | |||
@@ -335,7 +335,7 @@ | |||
335 | 519 x32 recvmsg compat_sys_recvmsg | 335 | 519 x32 recvmsg compat_sys_recvmsg |
336 | 520 x32 execve stub_x32_execve | 336 | 520 x32 execve stub_x32_execve |
337 | 521 x32 ptrace compat_sys_ptrace | 337 | 521 x32 ptrace compat_sys_ptrace |
338 | 522 x32 rt_sigpending sys32_rt_sigpending | 338 | 522 x32 rt_sigpending compat_sys_rt_sigpending |
339 | 523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait | 339 | 523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait |
340 | 524 x32 rt_sigqueueinfo sys32_rt_sigqueueinfo | 340 | 524 x32 rt_sigqueueinfo sys32_rt_sigqueueinfo |
341 | 525 x32 sigaltstack compat_sys_sigaltstack | 341 | 525 x32 sigaltstack compat_sys_sigaltstack |