arch_ptrace() uses of access_ok() are pointless
Subsystems (2)
RFC PATCH 1/1 arch_ptrace() uses of access_ok() are pointless
make it use copy_{from,to}_user(), rather than access_ok() + __copy_...
--- arch/powerpc/kernel/ptrace.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)
arch/powerpc/kernel/ptrace.c +7 -15
@@ -3081,27 +3081,19 @@ long arch_ptrace(struct task_struct *child, long request,#endif /* CONFIG_HAVE_HW_BREAKPOINT */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */ -if (!access_ok (VERIFY_WRITE , datavp, -sizeof (struct ppc_debug_info ))) +if (unlikely (copy_to_user (datavp, &dbginfo, + sizeof(struct ppc_debug_info)))return -EFAULT ; - ret =__copy_to_user (datavp, &dbginfo, -sizeof (struct ppc_debug_info )) ? - -EFAULT :0 ; -break ; +return 0 ; }case PPC_PTRACE_SETHWDEBUG : {struct ppc_hw_breakpoint bp_info; -if (!access_ok (VERIFY_READ , datavp, -sizeof (struct ppc_hw_breakpoint ))) -return -EFAULT ; - ret =__copy_from_user (&bp_info, datavp, -sizeof (struct ppc_hw_breakpoint )) ? - -EFAULT :0 ; -if (!ret) - ret =ppc_set_hwdebug (child, &bp_info); -break ; +if (unlikely (copy_from_user (&bp_info, datavp, + sizeof(struct ppc_hw_breakpoint))) +return -EFAULT ; +return ppc_set_hwdebug (child, &bp_info); }case PPC_PTRACE_DELHWDEBUG : {
Signature · 1 line
2.11.0
Quoted 13 lines · Al Viro
make it use copy_{from,to}_user(), rather than
access_ok()+__copy_...Signed-off-by Al Viro <[email protected]>--- arch/powerpc/kernel/ptrace.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)arch/powerpc/kernel/ptrace.c +0
-0
arch/powerpc/kernel/ptrace.c long arch_ptrace(struct task_struct *child, long request, · line 3085
Quoted 7 lines
arch/powerpc/kernel/ptrace.c +2
-2@@ -3081,27 +3081,19 @@ long arch_ptrace(struct task_struct *child, long request,#endif /* CONFIG_HAVE_HW_BREAKPOINT */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */ -if (!access_ok (VERIFY_WRITE , datavp, -sizeof (struct ppc_debug_info ))) +if (unlikely (copy_to_user (datavp, &dbginfo, + sizeof(struct ppc_debug_info)))
Maybe this is just an RFC, but:
CALL ../arch/powerpc/kernel/systbl_chk.sh../arch/powerpc/kernel/ptrace.c: In function ‘arch_ptrace’:../arch/powerpc/kernel/ptrace.c:3086:4: error: expected ‘)’ before ‘return’
return -EFAULT;
^~~~~~Missing closing parenthesis.
Quoted 30 lines
arch/powerpc/kernel/ptrace.c +5
-14return -EFAULT ; - ret =__copy_to_user (datavp, &dbginfo, -sizeof (struct ppc_debug_info )) ? - -EFAULT :0 ; -break ; +return 0 ; }case PPC_PTRACE_SETHWDEBUG : {struct ppc_hw_breakpoint bp_info; -if (!access_ok (VERIFY_READ , datavp, -sizeof (struct ppc_hw_breakpoint ))) -return -EFAULT ; - ret =__copy_from_user (&bp_info, datavp, -sizeof (struct ppc_hw_breakpoint )) ? - -EFAULT :0 ; -if (!ret) - ret =ppc_set_hwdebug (child, &bp_info); -break ; +if (unlikely (copy_from_user (&bp_info, datavp, + sizeof(struct ppc_hw_breakpoint))) +return -EFAULT ; +return ppc_set_hwdebug (child, &bp_info); }case PPC_PTRACE_DELHWDEBUG : { --2.11.0
Quoted 8 lines
Maybe this is just an RFC, but:
CALL
../arch/powerpc/kernel/systbl_chk.sh../arch/powerpc/kernel/ptrace.c: In function ‘arch_ptrace’:../arch/powerpc/kernel/ptrace.c:3086:4: error: expected ‘)’ before ‘return’return -EFAULT; ^~~~~~
and the same a few lines later. What's more, those 'unlikely' are pointless there. Fixed variant follows; only build-tested, though.
make it use copy_{from,to}_user(), rather than access_ok() + __copy_...
--- arch/powerpc/kernel/ptrace.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)
arch/powerpc/kernel/ptrace.c +7 -15
@@ -3081,27 +3081,19 @@ long arch_ptrace(struct task_struct *child, long request,#endif /* CONFIG_HAVE_HW_BREAKPOINT */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */ -if (!access_ok (VERIFY_WRITE , datavp, -sizeof (struct ppc_debug_info ))) +if (copy_to_user (datavp, &dbginfo, +sizeof (struct ppc_debug_info )))return -EFAULT ; - ret =__copy_to_user (datavp, &dbginfo, -sizeof (struct ppc_debug_info )) ? - -EFAULT :0 ; -break ; +return 0 ; }case PPC_PTRACE_SETHWDEBUG : {struct ppc_hw_breakpoint bp_info; -if (!access_ok (VERIFY_READ , datavp, -sizeof (struct ppc_hw_breakpoint ))) -return -EFAULT ; - ret =__copy_from_user (&bp_info, datavp, -sizeof (struct ppc_hw_breakpoint )) ? - -EFAULT :0 ; -if (!ret) - ret =ppc_set_hwdebug (child, &bp_info); -break ; +if (copy_from_user (&bp_info, datavp, +sizeof (struct ppc_hw_breakpoint ))) +return -EFAULT ; +return ppc_set_hwdebug (child, &bp_info); }case PPC_PTRACE_DELHWDEBUG : {
Signature · 1 line
2.11.0