[PATCH 19/19] utrace: consult PT_SINGLE_STEP/PT_SINGLE_BLOCK before user_disable_single_step()
Oleg Nesterov
oleg at redhat.com
Fri Jul 1 00:21:57 UTC 2011
- do not do user_enable_block_step() if PT_SINGLE_STEP is set, in this
case ptrace has already called user_enable_single_step()
- do not do user_disable_single_step() if PT_*_STEP is set, ptrace needs
the stepping
Unless the tracee is killed this can't race with ptrace, this is called
by the tracee itself.
Signed-off-by: Oleg Nesterov <oleg at redhat.com>
---
kernel/utrace.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/utrace.c b/kernel/utrace.c
index 508c13c..d6607cb 100644
--- a/kernel/utrace.c
+++ b/kernel/utrace.c
@@ -1828,7 +1828,8 @@ static void finish_resume_report(struct task_struct *task,
case UTRACE_BLOCKSTEP:
if (likely(arch_has_block_step())) {
- user_enable_block_step(task);
+ if (!(current->ptrace & PT_SINGLE_STEP))
+ user_enable_block_step(task);
break;
}
@@ -1856,7 +1857,8 @@ static void finish_resume_report(struct task_struct *task,
case UTRACE_REPORT:
case UTRACE_RESUME:
default:
- user_disable_single_step(task);
+ if (!(current->ptrace & (PT_SINGLE_STEP | PT_SINGLE_BLOCK)))
+ user_disable_single_step(task);
break;
}
}
--
1.5.5.1
More information about the kernel
mailing list