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 336713ab4745..75c602dc874f 100644
--- a/arch/frv/kernel/signal.c
+++ b/arch/frv/kernel/signal.c
@@ -174,7 +174,7 @@ 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 set_fs(USER_DS); 179 set_fs(USER_DS);
180 180
@@ -183,13 +183,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set)
183 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 183 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
184 return -EFAULT; 184 return -EFAULT;
185 185
186 rsig = sig; 186 if (__put_user(sig, &frame->sig) < 0)
187 if (sig < 32 &&
188 __current_thread_info->exec_domain &&
189 __current_thread_info->exec_domain->signal_invmap)
190 rsig = __current_thread_info->exec_domain->signal_invmap[sig];
191
192 if (__put_user(rsig, &frame->sig) < 0)
193 return -EFAULT; 187 return -EFAULT;
194 188
195 if (setup_sigcontext(&frame->sc, set->sig[0])) 189 if (setup_sigcontext(&frame->sc, set->sig[0]))
@@ -255,7 +249,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set)
255static int setup_rt_frame(struct ksignal *ksig, sigset_t *set) 249static int setup_rt_frame(struct ksignal *ksig, sigset_t *set)
256{ 250{
257 struct rt_sigframe __user *frame; 251 struct rt_sigframe __user *frame;
258 int rsig, sig = ksig->sig; 252 int sig = ksig->sig;
259 253
260 set_fs(USER_DS); 254 set_fs(USER_DS);
261 255
@@ -264,13 +258,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set)
264 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 258 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
265 return -EFAULT; 259 return -EFAULT;
266 260
267 rsig = sig; 261 if (__put_user(sig, &frame->sig) ||
268 if (sig < 32 &&
269 __current_thread_info->exec_domain &&
270 __current_thread_info->exec_domain->signal_invmap)
271 rsig = __current_thread_info->exec_domain->signal_invmap[sig];
272
273 if (__put_user(rsig, &frame->sig) ||
274 __put_user(&frame->info, &frame->pinfo) || 262 __put_user(&frame->info, &frame->pinfo) ||
275 __put_user(&frame->uc, &frame->puc)) 263 __put_user(&frame->uc, &frame->puc))
276 return -EFAULT; 264 return -EFAULT;