diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-24 23:12:04 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 15:09:21 -0500 |
commit | 9aae8fc05d2d130797be436eb7cae29c32710193 (patch) | |
tree | 72edfb62025cb4afc2977b9171fcc05e0dd21363 | |
parent | 5cf22100229b855bc4559dccfd8d7cb7266f99f5 (diff) |
switch rt_tgsigqueueinfo to COMPAT_SYSCALL_DEFINE
C ABI violations on sparc, ppc and mips
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | include/linux/signal.h | 2 | ||||
-rw-r--r-- | kernel/compat.c | 11 | ||||
-rw-r--r-- | kernel/signal.c | 17 |
3 files changed, 16 insertions, 14 deletions
diff --git a/include/linux/signal.h b/include/linux/signal.h index 786bd99fde65..ed1e71f1aac7 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -241,8 +241,6 @@ extern int do_send_sig_info(int sig, struct siginfo *info, | |||
241 | struct task_struct *p, bool group); | 241 | struct task_struct *p, bool group); |
242 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); | 242 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); |
243 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); | 243 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); |
244 | extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, | ||
245 | siginfo_t *info); | ||
246 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, | 244 | extern int do_sigtimedwait(const sigset_t *, siginfo_t *, |
247 | const struct timespec *); | 245 | const struct timespec *); |
248 | extern int sigprocmask(int, sigset_t *, sigset_t *); | 246 | extern int sigprocmask(int, sigset_t *, sigset_t *); |
diff --git a/kernel/compat.c b/kernel/compat.c index a53b04a2b5eb..cf75a288f0c0 100644 --- a/kernel/compat.c +++ b/kernel/compat.c | |||
@@ -1025,17 +1025,6 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese, | |||
1025 | return ret; | 1025 | return ret; |
1026 | } | 1026 | } |
1027 | 1027 | ||
1028 | asmlinkage long | ||
1029 | compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, | ||
1030 | struct compat_siginfo __user *uinfo) | ||
1031 | { | ||
1032 | siginfo_t info; | ||
1033 | |||
1034 | if (copy_siginfo_from_user32(&info, uinfo)) | ||
1035 | return -EFAULT; | ||
1036 | return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); | ||
1037 | } | ||
1038 | |||
1039 | #ifdef __ARCH_WANT_COMPAT_SYS_TIME | 1028 | #ifdef __ARCH_WANT_COMPAT_SYS_TIME |
1040 | 1029 | ||
1041 | /* compat_time_t is a 32 bit "long" and needs to get converted. */ | 1030 | /* compat_time_t is a 32 bit "long" and needs to get converted. */ |
diff --git a/kernel/signal.c b/kernel/signal.c index 93fd4b83d866..5a4aed1244fb 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -3030,7 +3030,7 @@ COMPAT_SYSCALL_DEFINE3(rt_sigqueueinfo, | |||
3030 | #endif | 3030 | #endif |
3031 | #endif | 3031 | #endif |
3032 | 3032 | ||
3033 | long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info) | 3033 | static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info) |
3034 | { | 3034 | { |
3035 | /* This is only valid for single tasks */ | 3035 | /* This is only valid for single tasks */ |
3036 | if (pid <= 0 || tgid <= 0) | 3036 | if (pid <= 0 || tgid <= 0) |
@@ -3060,6 +3060,21 @@ SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig, | |||
3060 | return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); | 3060 | return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); |
3061 | } | 3061 | } |
3062 | 3062 | ||
3063 | #ifdef CONFIG_COMPAT | ||
3064 | COMPAT_SYSCALL_DEFINE4(rt_tgsigqueueinfo, | ||
3065 | compat_pid_t, tgid, | ||
3066 | compat_pid_t, pid, | ||
3067 | int, sig, | ||
3068 | struct compat_siginfo __user *, uinfo) | ||
3069 | { | ||
3070 | siginfo_t info; | ||
3071 | |||
3072 | if (copy_siginfo_from_user32(&info, uinfo)) | ||
3073 | return -EFAULT; | ||
3074 | return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); | ||
3075 | } | ||
3076 | #endif | ||
3077 | |||
3063 | int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) | 3078 | int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) |
3064 | { | 3079 | { |
3065 | struct task_struct *t = current; | 3080 | struct task_struct *t = current; |