- 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@xxxxxxxxxx> --- 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 _______________________________________________ kernel mailing list kernel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/kernel