Message ID | 20190228183220.15626-3-sudeep.holla@arm.com |
---|---|
State | Superseded |
Headers | show |
Series | ptrace: consolidate PTRACE_SYSEMU handling and add support for arm64 | expand |
On 2019/3/1 2:32, Sudeep Holla wrote: > Currently each architecture handles PTRACE_SYSEMU in very similar way. > It's completely arch independent and can be handled in the code helping > to consolidate PTRACE_SYSEMU handling. > > Let's introduce a hook 'ptrace_syscall_enter' that arch specific syscall > entry code can call. > The 'ptrace_syscall_enter' is dedicated for PTRACE_SYSEMU flag, So I suggest to rename the function to something like 'ptrace_syscall_emu_enter". > +/* > + * Hook to check and report for PTRACE_SYSEMU, can be called from arch > + * arch syscall entry code > + */ > +long ptrace_syscall_enter(struct pt_regs *regs) > +{ > +#ifdef TIF_SYSCALL_EMU > +if (test_thread_flag(TIF_SYSCALL_EMU)) { > +if (tracehook_report_syscall_entry(regs)); Shall we remove the semi-colon at end of the above line? > +return -1L; > +} > +#endif > +return 0; > +} > + > /* > * Detach all tasks we were using ptrace on. Called with tasklist held > * for writing. > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
On Mon, Mar 04, 2019 at 08:03:47AM +0000, Haibo Xu (Arm Technology China) wrote: > On 2019/3/1 2:32, Sudeep Holla wrote: > > Currently each architecture handles PTRACE_SYSEMU in very similar way. > > It's completely arch independent and can be handled in the code helping > > to consolidate PTRACE_SYSEMU handling. > > > > Let's introduce a hook 'ptrace_syscall_enter' that arch specific syscall > > entry code can call. > > > > The 'ptrace_syscall_enter' is dedicated for PTRACE_SYSEMU flag, > So I suggest to rename the function to something like 'ptrace_syscall_emu_enter". > I am fine to rename. > > +/* > > + * Hook to check and report for PTRACE_SYSEMU, can be called from arch > > + * arch syscall entry code > > + */ > > +long ptrace_syscall_enter(struct pt_regs *regs) > > +{ > > +#ifdef TIF_SYSCALL_EMU > > + if (test_thread_flag(TIF_SYSCALL_EMU)) { > > + if (tracehook_report_syscall_entry(regs)); > > Shall we remove the semi-colon at end of the above line? > Added intentionally to keep GCC happy. -- Regards, Sudeep
On Mon, Mar 04, 2019 at 10:46:43AM +0000, Sudeep Holla wrote: > On Mon, Mar 04, 2019 at 08:03:47AM +0000, Haibo Xu (Arm Technology China) wrote: > > On 2019/3/1 2:32, Sudeep Holla wrote: > > > +long ptrace_syscall_enter(struct pt_regs *regs) > > > +{ > > > +#ifdef TIF_SYSCALL_EMU > > > + if (test_thread_flag(TIF_SYSCALL_EMU)) { > > > + if (tracehook_report_syscall_entry(regs)); > > > > Shall we remove the semi-colon at end of the above line? > > Added intentionally to keep GCC happy. GCC warns because the user explicitly asked for it, with __must_check. If you want to do things with an "if" like this, you should write e.g. if (tracehook_report_syscall_entry(regs)) /* * We can ignore the return code here, because of * X and Y and Z. */ ; Or it probably is nicer to use a block: if (tracehook_report_syscall_entry(regs)) { /* * We can ignore the return code here, because of * X and Y and Z. */ } The point is, you *always* should have a nice fat comment if you are ignoring the return code of a __must_check function. Segher
On Mon, Mar 04, 2019 at 06:23:32AM -0600, Segher Boessenkool wrote: > On Mon, Mar 04, 2019 at 10:46:43AM +0000, Sudeep Holla wrote: > > On Mon, Mar 04, 2019 at 08:03:47AM +0000, Haibo Xu (Arm Technology China) wrote: > > > On 2019/3/1 2:32, Sudeep Holla wrote: > > > > +long ptrace_syscall_enter(struct pt_regs *regs) > > > > +{ > > > > +#ifdef TIF_SYSCALL_EMU > > > > + if (test_thread_flag(TIF_SYSCALL_EMU)) { > > > > + if (tracehook_report_syscall_entry(regs)); > > > > > > Shall we remove the semi-colon at end of the above line? > > > > Added intentionally to keep GCC happy. > > GCC warns because the user explicitly asked for it, with __must_check. > If you want to do things with an "if" like this, you should write e.g. > > if (tracehook_report_syscall_entry(regs)) > /* > * We can ignore the return code here, because of > * X and Y and Z. > */ > ; > > Or it probably is nicer to use a block: > > if (tracehook_report_syscall_entry(regs)) { > /* > * We can ignore the return code here, because of > * X and Y and Z. > */ > } > > The point is, you *always* should have a nice fat comment if you are > ignoring the return code of a __must_check function. > Agreed, will add the comment. -- Regards, Sudeep
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index edb9b040c94c..e30f51e3363e 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h @@ -407,6 +407,7 @@ static inline void user_single_step_report(struct pt_regs *regs) #define current_user_stack_pointer() user_stack_pointer(current_pt_regs()) #endif +extern long ptrace_syscall_enter(struct pt_regs *regs); extern int task_current_syscall(struct task_struct *target, long *callno, unsigned long args[6], unsigned int maxargs, unsigned long *sp, unsigned long *pc); diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 4fa3b7f4c3c7..6724eaf98e79 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -29,6 +29,7 @@ #include <linux/hw_breakpoint.h> #include <linux/cn_proc.h> #include <linux/compat.h> +#include <linux/tracehook.h> /* * Access another process' address space via ptrace. @@ -557,6 +558,21 @@ static int ptrace_detach(struct task_struct *child, unsigned int data) return 0; } +/* + * Hook to check and report for PTRACE_SYSEMU, can be called from arch + * arch syscall entry code + */ +long ptrace_syscall_enter(struct pt_regs *regs) +{ +#ifdef TIF_SYSCALL_EMU + if (test_thread_flag(TIF_SYSCALL_EMU)) { + if (tracehook_report_syscall_entry(regs)); + return -1L; + } +#endif + return 0; +} + /* * Detach all tasks we were using ptrace on. Called with tasklist held * for writing.
Currently each architecture handles PTRACE_SYSEMU in very similar way. It's completely arch independent and can be handled in the code helping to consolidate PTRACE_SYSEMU handling. Let's introduce a hook 'ptrace_syscall_enter' that arch specific syscall entry code can call. Cc: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> --- include/linux/ptrace.h | 1 + kernel/ptrace.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) -- 2.17.1