From: Elvira Khabirova <lineprinter@altlinux.org>
To: oleg@redhat.com, rostedt@goodmis.org, mingo@redhat.com
Cc: linux-kernel@vger.kernel.org, ldv@altlinux.org, esyr@redhat.com,
luto@kernel.org, strace-devel@lists.strace.io,
linux-api@vger.kernel.org
Subject: [PATCH RESEND v3 1/3] ptrace: pass type of a syscall-stop in ptrace_message
Date: Sun, 25 Nov 2018 02:22:27 +0100 [thread overview]
Message-ID: <20181125022227.55e8caf7@akathisia> (raw)
In-Reply-To: <20181125022150.46258a20@akathisia>
Define two constants, PTRACE_EVENTMSG_SYSCALL_ENTRY and
PTRACE_EVENTMSG_SYSCALL_EXIT, and place them in ptrace_message
for the duration of syscall-stops.
This way ptracers can distinguish syscall-enter-stops
from syscall-exit-stops using PTRACE_GETEVENTMSG request.
Signed-off-by: Elvira Khabirova <lineprinter@altlinux.org>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
---
include/linux/tracehook.h | 9 ++++++---
include/uapi/linux/ptrace.h | 10 ++++++++++
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
index 40b0b4c1bf7b..633a83fe7051 100644
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -57,13 +57,15 @@ struct linux_binprm;
/*
* ptrace report for syscall entry and exit looks identical.
*/
-static inline int ptrace_report_syscall(struct pt_regs *regs)
+static inline int ptrace_report_syscall(struct pt_regs *regs,
+ unsigned long message)
{
int ptrace = current->ptrace;
if (!(ptrace & PT_PTRACED))
return 0;
+ current->ptrace_message = message;
ptrace_notify(SIGTRAP | ((ptrace & PT_TRACESYSGOOD) ? 0x80 : 0));
/*
@@ -76,6 +78,7 @@ static inline int ptrace_report_syscall(struct pt_regs *regs)
current->exit_code = 0;
}
+ current->ptrace_message = 0;
return fatal_signal_pending(current);
}
@@ -101,7 +104,7 @@ static inline int ptrace_report_syscall(struct pt_regs *regs)
static inline __must_check int tracehook_report_syscall_entry(
struct pt_regs *regs)
{
- return ptrace_report_syscall(regs);
+ return ptrace_report_syscall(regs, PTRACE_EVENTMSG_SYSCALL_ENTRY);
}
/**
@@ -126,7 +129,7 @@ static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
if (step)
user_single_step_report(regs);
else
- ptrace_report_syscall(regs);
+ ptrace_report_syscall(regs, PTRACE_EVENTMSG_SYSCALL_EXIT);
}
/**
diff --git a/include/uapi/linux/ptrace.h b/include/uapi/linux/ptrace.h
index d5a1b8a492b9..cb138902d042 100644
--- a/include/uapi/linux/ptrace.h
+++ b/include/uapi/linux/ptrace.h
@@ -104,6 +104,16 @@ struct seccomp_metadata {
#define PTRACE_O_MASK (\
0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP)
+/*
+ * These values are stored in task->ptrace_message by tracehook_report_syscall_*
+ * to describe current syscall-stop.
+ *
+ * Values for these constants are chosen so that they do not appear
+ * in task->ptrace_message by other means.
+ */
+#define PTRACE_EVENTMSG_SYSCALL_ENTRY 0x80000000U
+#define PTRACE_EVENTMSG_SYSCALL_EXIT 0x90000000U
+
#include <asm/ptrace.h>
--
2.19.1
next prev parent reply other threads:[~2018-11-25 1:22 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-25 1:21 [PATCH RESEND v3 0/3] ptrace: add PTRACE_GET_SYSCALL_INFO request Elvira Khabirova
2018-11-25 1:22 ` Elvira Khabirova [this message]
2018-11-25 1:54 ` [PATCH RESEND v3 1/3] ptrace: pass type of a syscall-stop in ptrace_message Joey Pabalinas
2018-11-25 2:10 ` Dmitry V. Levin
2018-11-25 6:17 ` Joey Pabalinas
2018-11-26 14:56 ` Oleg Nesterov
2018-11-27 2:53 ` Elvira Khabirova
2018-11-27 3:48 ` Dmitry V. Levin
2018-11-25 1:23 ` [PATCH RESEND v3 2/3] ptrace: add PTRACE_GET_SYSCALL_INFO request Elvira Khabirova
2018-11-25 1:23 ` [RFC PATCH RESEND v3 3/3] ptrace: add PTRACE_EVENT_SECCOMP support to PTRACE_GET_SYSCALL_INFO Elvira Khabirova
2018-11-26 14:35 ` Oleg Nesterov
2018-11-27 3:07 ` Elvira Khabirova
2018-11-27 3:21 ` Dmitry V. Levin
2018-11-27 12:31 ` Oleg Nesterov
2018-11-27 23:27 ` Dmitry V. Levin
2018-11-28 12:35 ` Oleg Nesterov
2018-11-28 12:44 ` Dmitry V. Levin
2018-11-28 13:13 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181125022227.55e8caf7@akathisia \
--to=lineprinter@altlinux.org \
--cc=esyr@redhat.com \
--cc=ldv@altlinux.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=rostedt@goodmis.org \
--cc=strace-devel@lists.strace.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).