Re: [PATCH v4 1/2] ptrace: save the type of syscall-stop in ptrace_message
From: Oleg Nesterov <oleg@redhat.com>
Date: 2018-11-28 14:20:41
Also in:
lkml
On 11/28, Dmitry V. Levin wrote:
On Wed, Nov 28, 2018 at 02:49:14PM +0100, Oleg Nesterov wrote:quoted
On 11/28, Dmitry V. Levin wrote:quoted
+/* + * 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 0x90000000UAgain, I do not really understand the comment... Why should we care about "do not appear in task->ptrace_message by other means" ? 2/2 should detect ptrace_report_syscall() case correctly, so we can use any numbers, say, 1 and 2? If debugger does PTRACE_GETEVENTMSG it should know how to interpet the value anyway after wait(status).Given that without this patch the value returned by PTRACE_GETEVENTMSG during syscall stop is undefined, we need two different ptrace_message values that cannot be set by other ptrace events to enable reliable identification of syscall-enter-stop and syscall-exit-stop in userspace: if we make PTRACE_GETEVENTMSG return 0 or any other value routinely set by other ptrace events, it would be hard for userspace to find out whether the kernel implements new semantics or not.
Hmm, why? Debugger can just do ptrace(PTRACE_GET_SYSCALL_INFO, NULL), if it returns EIO then it is not implemented? Oleg.