Skip to content

Commit 5c1f178

Browse files
author
Al Viro
committed
x86: __setup_frame(): consolidate uaccess areas
Signed-off-by: Al Viro <[email protected]>
1 parent b00d8f8 commit 5c1f178

File tree

1 file changed

+6
-17
lines changed

1 file changed

+6
-17
lines changed

arch/x86/kernel/signal.c

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -302,25 +302,16 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
302302
{
303303
struct sigframe __user *frame;
304304
void __user *restorer;
305-
int err = 0;
306305
void __user *fp = NULL;
307306

308307
frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
309308

310-
if (!access_ok(frame, sizeof(*frame)))
311-
return -EFAULT;
312-
313-
if (__put_user(sig, &frame->sig))
309+
if (!user_access_begin(frame, sizeof(*frame)))
314310
return -EFAULT;
315311

316-
if (!user_access_begin(&frame->sc, sizeof(struct sigcontext)))
317-
return -EFAULT;
312+
unsafe_put_user(sig, &frame->sig, Efault);
318313
unsafe_put_sigcontext(&frame->sc, fp, regs, set, Efault);
319-
user_access_end();
320-
321-
if (__put_user(set->sig[1], &frame->extramask[0]))
322-
return -EFAULT;
323-
314+
unsafe_put_user(set->sig[1], &frame->extramask[0], Efault);
324315
if (current->mm->context.vdso)
325316
restorer = current->mm->context.vdso +
326317
vdso_image_32.sym___kernel_sigreturn;
@@ -330,7 +321,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
330321
restorer = ksig->ka.sa.sa_restorer;
331322

332323
/* Set up to return from userspace. */
333-
err |= __put_user(restorer, &frame->pretcode);
324+
unsafe_put_user(restorer, &frame->pretcode, Efault);
334325

335326
/*
336327
* This is popl %eax ; movl $__NR_sigreturn, %eax ; int $0x80
@@ -339,10 +330,8 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
339330
* reasons and because gdb uses it as a signature to notice
340331
* signal handler stack frames.
341332
*/
342-
err |= __put_user(*((u64 *)&retcode), (u64 *)frame->retcode);
343-
344-
if (err)
345-
return -EFAULT;
333+
unsafe_put_user(*((u64 *)&retcode), (u64 *)frame->retcode, Efault);
334+
user_access_end();
346335

347336
/* Set up registers for signal handler */
348337
regs->sp = (unsigned long)frame;

0 commit comments

Comments
 (0)