linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sparc: Removes code duplication between arch_ptrace and compat_arch_ptrace
@ 2020-11-27  3:58 Youling Tang
  0 siblings, 0 replies; only message in thread
From: Youling Tang @ 2020-11-27  3:58 UTC (permalink / raw)
  To: Oleg Nesterov, David S. Miller; +Cc: sparclinux, linux-kernel

The patch removes code duplication between arch_ptrace and
compat_arch_ptrace, in large part by having the former call
into the later for all requests that don't need any special
"compat" treatment.

Signed-off-by: Youling Tang <tangyouling@loongson.cn>
---
 arch/sparc/kernel/ptrace_64.c | 71 +++++++++++--------------------------------
 1 file changed, 17 insertions(+), 54 deletions(-)

diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
index 2b92155d..4fd8c33 100644
--- a/arch/sparc/kernel/ptrace_64.c
+++ b/arch/sparc/kernel/ptrace_64.c
@@ -929,78 +929,51 @@ struct compat_fps {
 long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 			compat_ulong_t caddr, compat_ulong_t cdata)
 {
-	compat_ulong_t caddr2 = task_pt_regs(current)->u_regs[UREG_I4];
 	struct pt_regs32 __user *pregs;
 	struct compat_fps __user *fps;
-	unsigned long addr2 = caddr2;
 	unsigned long addr = caddr;
 	unsigned long data = cdata;
-	int ret;
 
 	pregs = (struct pt_regs32 __user *) addr;
 	fps = (struct compat_fps __user *) addr;
 
 	switch (request) {
-	case PTRACE_PEEKUSR:
-		ret = (addr != 0) ? -EIO : 0;
-		break;
-
 	case PTRACE_GETREGS:
-		ret = copy_regset_to_user(child, &ptrace32_view,
+		return copy_regset_to_user(child, &ptrace32_view,
 					  REGSET_GENERAL, 0,
 					  19 * sizeof(u32),
 					  pregs);
-		break;
 
 	case PTRACE_SETREGS:
-		ret = copy_regset_from_user(child, &ptrace32_view,
+		return copy_regset_from_user(child, &ptrace32_view,
 					  REGSET_GENERAL, 0,
 					  19 * sizeof(u32),
 					  pregs);
-		break;
 
 	case PTRACE_GETFPREGS:
-		ret = copy_regset_to_user(child, &ptrace32_view,
+		return copy_regset_to_user(child, &ptrace32_view,
 					  REGSET_FP, 0,
 					  68 * sizeof(u32),
 					  fps);
-		break;
 
 	case PTRACE_SETFPREGS:
-		ret = copy_regset_from_user(child, &ptrace32_view,
+		return copy_regset_from_user(child, &ptrace32_view,
 					  REGSET_FP, 0,
 					  33 * sizeof(u32),
 					  fps);
-		break;
 
+	case PTRACE_PEEKUSR:
 	case PTRACE_READTEXT:
 	case PTRACE_READDATA:
-		ret = ptrace_readdata(child, addr,
-				      (char __user *)addr2, data);
-		if (ret == data)
-			ret = 0;
-		else if (ret >= 0)
-			ret = -EIO;
-		break;
-
 	case PTRACE_WRITETEXT:
 	case PTRACE_WRITEDATA:
-		ret = ptrace_writedata(child, (char __user *) addr2,
-				       addr, data);
-		if (ret == data)
-			ret = 0;
-		else if (ret >= 0)
-			ret = -EIO;
-		break;
+		return arch_ptrace(child, request, addr, data);
 
 	default:
 		if (request == PTRACE_SPARC_DETACH)
 			request = PTRACE_DETACH;
-		ret = compat_ptrace_request(child, request, addr, data);
-		break;
+		return compat_ptrace_request(child, request, addr, data);
 	}
-
-	return ret;
 }
 #endif /* CONFIG_COMPAT */
 
@@ -1025,63 +998,53 @@ long arch_ptrace(struct task_struct *child, long request,
 
 	switch (request) {
 	case PTRACE_PEEKUSR:
-		ret = (addr != 0) ? -EIO : 0;
-		break;
+		return ((addr != 0) ? -EIO : 0);
 
 	case PTRACE_GETREGS64:
-		ret = copy_regset_to_user(child, &ptrace64_view,
+		return copy_regset_to_user(child, &ptrace64_view,
 					  REGSET_GENERAL, 0,
 					  19 * sizeof(u64),
 					  pregs);
-		break;
 
 	case PTRACE_SETREGS64:
-		ret = copy_regset_from_user(child, &ptrace64_view,
+		return copy_regset_from_user(child, &ptrace64_view,
 					  REGSET_GENERAL, 0,
 					  19 * sizeof(u64),
 					  pregs);
-		break;
 
 	case PTRACE_GETFPREGS64:
-		ret = copy_regset_to_user(child, view, REGSET_FP,
+		return copy_regset_to_user(child, view, REGSET_FP,
 					  0 * sizeof(u64),
 					  33 * sizeof(u64),
 					  fps);
-		break;
 
 	case PTRACE_SETFPREGS64:
-		ret = copy_regset_from_user(child, view, REGSET_FP,
+		return copy_regset_from_user(child, view, REGSET_FP,
 					  0 * sizeof(u64),
 					  33 * sizeof(u64),
 					  fps);
-		break;
 
 	case PTRACE_READTEXT:
 	case PTRACE_READDATA:
 		ret = ptrace_readdata(child, addr, addr2p, data);
 		if (ret == data)
-			ret = 0;
+			return 0;
 		else if (ret >= 0)
-			ret = -EIO;
-		break;
+			return -EIO;
 
 	case PTRACE_WRITETEXT:
 	case PTRACE_WRITEDATA:
 		ret = ptrace_writedata(child, addr2p, addr, data);
 		if (ret == data)
-			ret = 0;
+			return 0;
 		else if (ret >= 0)
-			ret = -EIO;
-		break;
+			return -EIO;
 
 	default:
 		if (request == PTRACE_SPARC_DETACH)
 			request = PTRACE_DETACH;
-		ret = ptrace_request(child, request, addr, data);
-		break;
+		return ptrace_request(child, request, addr, data);
 	}
-
-	return ret;
 }
 
 asmlinkage int syscall_trace_enter(struct pt_regs *regs)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-11-27  3:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-27  3:58 [PATCH] sparc: Removes code duplication between arch_ptrace and compat_arch_ptrace Youling Tang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).