aboutsummaryrefslogtreecommitdiffstats
path: root/arch/frv/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/frv/kernel/signal.c')
-rw-r--r--arch/frv/kernel/signal.c20
1 files changed, 4 insertions, 16 deletions
diff --git a/arch/frv/kernel/signal.c b/arch/frv/kernel/signal.c
index 85ca6727ca07..82d5e914dc15 100644
--- a/arch/frv/kernel/signal.c
+++ b/arch/frv/kernel/signal.c
@@ -174,20 +174,14 @@ static inline void __user *get_sigframe(struct ksignal *ksig,
174static int setup_frame(struct ksignal *ksig, sigset_t *set) 174static int setup_frame(struct ksignal *ksig, sigset_t *set)
175{ 175{
176 struct sigframe __user *frame; 176 struct sigframe __user *frame;
177 int rsig, sig = ksig->sig; 177 int sig = ksig->sig;
178 178
179 frame = get_sigframe(ksig, sizeof(*frame)); 179 frame = get_sigframe(ksig, sizeof(*frame));
180 180
181 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 181 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
182 return -EFAULT; 182 return -EFAULT;
183 183
184 rsig = sig; 184 if (__put_user(sig, &frame->sig) < 0)
185 if (sig < 32 &&
186 __current_thread_info->exec_domain &&
187 __current_thread_info->exec_domain->signal_invmap)
188 rsig = __current_thread_info->exec_domain->signal_invmap[sig];
189
190 if (__put_user(rsig, &frame->sig) < 0)
191 return -EFAULT; 185 return -EFAULT;
192 186
193 if (setup_sigcontext(&frame->sc, set->sig[0])) 187 if (setup_sigcontext(&frame->sc, set->sig[0]))
@@ -253,20 +247,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set)
253static int setup_rt_frame(struct ksignal *ksig, sigset_t *set) 247static int setup_rt_frame(struct ksignal *ksig, sigset_t *set)
254{ 248{
255 struct rt_sigframe __user *frame; 249 struct rt_sigframe __user *frame;
256 int rsig, sig = ksig->sig; 250 int sig = ksig->sig;
257 251
258 frame = get_sigframe(ksig, sizeof(*frame)); 252 frame = get_sigframe(ksig, sizeof(*frame));
259 253
260 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 254 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
261 return -EFAULT; 255 return -EFAULT;
262 256
263 rsig = sig; 257 if (__put_user(sig, &frame->sig) ||
264 if (sig < 32 &&
265 __current_thread_info->exec_domain &&
266 __current_thread_info->exec_domain->signal_invmap)
267 rsig = __current_thread_info->exec_domain->signal_invmap[sig];
268
269 if (__put_user(rsig, &frame->sig) ||
270 __put_user(&frame->info, &frame->pinfo) || 258 __put_user(&frame->info, &frame->pinfo) ||
271 __put_user(&frame->uc, &frame->puc)) 259 __put_user(&frame->uc, &frame->puc))
272 return -EFAULT; 260 return -EFAULT;