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 /kernel/signal.c | |
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>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 17 |
1 files changed, 16 insertions, 1 deletions
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; |