powerpc/signal: Move access_ok() out of get_sigframe()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 18 Aug 2020 17:19:20 +0000 (17:19 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:12 +0000 (01:01 +1100)
This access_ok() will soon be performed by user_access_begin().
So move it out of get_sigframe().

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/900b93744732ed0887f28f5b6a40730fb04a43fa.1597770847.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/signal.c
arch/powerpc/kernel/signal_32.c
arch/powerpc/kernel/signal_64.c

index 7cc305a..37372fd 100644 (file)
@@ -154,10 +154,6 @@ void __user *get_sigframe(struct ksignal *ksig, unsigned long sp,
        oldsp = sigsp(oldsp, ksig);
        newsp = (oldsp - frame_size) & ~0xFUL;
 
-       /* Check access */
-       if (!access_ok((void __user *)newsp, oldsp - newsp))
-               return NULL;
-
         return (void __user *)newsp;
 }
 
index 8cbc9ac..61621ac 100644 (file)
@@ -768,7 +768,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
        /* Put a Real Time Context onto stack */
        rt_sf = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*rt_sf), 1);
        addr = rt_sf;
-       if (unlikely(rt_sf == NULL))
+       if (!access_ok(rt_sf, sizeof(*rt_sf)))
                goto badframe;
 
        /* Put the siginfo & fill in most of the ucontext */
@@ -1227,7 +1227,7 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
 
        /* Set up Signal Frame */
        frame = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*frame), 1);
-       if (unlikely(frame == NULL))
+       if (!access_ok(frame, sizeof(*frame)))
                goto badframe;
        sc = (struct sigcontext __user *) &frame->sctx;
 
index cae612b..d3db787 100644 (file)
@@ -823,7 +823,7 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
 #endif
 
        frame = get_sigframe(ksig, get_tm_stackpointer(tsk), sizeof(*frame), 0);
-       if (unlikely(frame == NULL))
+       if (!access_ok(frame, sizeof(*frame)))
                goto badframe;
 
        err |= __put_user(&frame->info, &frame->pinfo);