On 11/16, Roland McGrath wrote:
The change we talked about before seems simple enough and should cover this
without new kludges in the ptrace layer. I did this (commit f19442c).
I will reply to this in the next email, I'd like to discuss
another minor related issue first.
I noticed this change in your tree
commit 2583b3267ed599cb25f6f893c24465204e06b3a6
utrace: nit for utrace-ptrace
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -143,7 +143,7 @@ static inline void
tracehook_report_syscall_exit(struct pt_regs *regs, int step)
if (task_utrace_flags(current) UTRACE_EVENT(SYSCALL_EXIT))
utrace_report_syscall_exit(regs);
- if (step task_ptrace(current)) {
+ if (step (task_ptrace(current) PT_PTRACED)) {
siginfo_t info;
user_single_step_siginfo(current, regs, info);
force_sig_info(SIGTRAP, info, current);
Yes, and in fact I already had this change in my tree but didn't
send it to you yet.
But, I can't understand whats going on,
- if (step task_ptrace(current)) {
+ if (step (task_ptrace(current) PT_PTRACED)) {
The code after
ptrace-change-tracehook_report_syscall_exit-to-handle-stepping.patch
is if (step), not if (step task_ptrace(current)), can't understand
where did this task_ptrace(current) come from. The previous commit in
your tree is
462a57bb7a6a5c67b70e4388f97239f1e4da98df
ptrace: change tracehook_report_syscall_exit() to handle stepping
Initially I was going to add the change below into
tracehooks: prepare for utrace-ptrace,
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -134,6 +134,9 @@ static inline __must_check int tracehook
*/
static inline void tracehook_report_syscall_exit(struct pt_regs *regs,
int step)
{
+ if (!(task_ptrace(current) PT_PTRACED))
+ return;
+
if (step) {
siginfo_t info;
user_single_step_siginfo(current, regs, info);
but now I think perhaps it would be better to send
ptrace-change-tracehook_report_syscall_exit-to-handle-stepping_fix
to akpm right now:
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -134,7 +134,7 @@ static inline __must_check int tracehook
*/
static inline void tracehook_report_syscall_exit(struct pt_regs *regs,
int step)
{
- if (step) {
+ if (step (task_ptrace(current) PT_PTRACED)) {
siginfo_t info;
user_single_step_siginfo(current, regs, info);
force_sig_info(SIGTRAP, info, current);
What do you think?
Now, let's return to the original topic. Please note that utrace
does not need int step at all, see the next email.
Oleg.