Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 945fb68f authored by AKASHI Takahiro's avatar AKASHI Takahiro Committed by Ruchi Kandoi
Browse files

arm64: ptrace: add PTRACE_SET_SYSCALL



Note: This patch is from v6 of Takahiro's proposed
"arm64: add seccomp support" patchset (leecam@google.com)

To allow tracer to be able to change/skip a system call by re-writing
a syscall number, there are several approaches:

(1) modify x8 register with ptrace(PTRACE_SETREGSET), and handle this case
    later on in syscall_trace_enter(), or
(2) support ptrace(PTRACE_SET_SYSCALL) as on arm

Thinking of the fact that user_pt_regs doesn't expose 'syscallno' to
tracer as well as that secure_computing() expects a changed syscall number
to be visible, especially case of -1, before this function returns in
syscall_trace_enter(), we'd better take (2).

Signed-off-by: default avatarAKASHI Takahiro <takahiro.akashi@linaro.org>
parent a77185d6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@

#include <asm/hwcap.h>

#define PTRACE_SET_SYSCALL	23

/*
 * PSR bits
+13 −1
Original line number Diff line number Diff line
@@ -1082,7 +1082,19 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
long arch_ptrace(struct task_struct *child, long request,
		 unsigned long addr, unsigned long data)
{
	return ptrace_request(child, request, addr, data);
	int ret;

	switch (request) {
		case PTRACE_SET_SYSCALL:
			task_pt_regs(child)->syscallno = data;
			ret = 0;
			break;
		default:
			ret = ptrace_request(child, request, addr, data);
			break;
	}

	return ret;
}

enum ptrace_syscall_dir {