From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: linux-kernel@vger.kernel.org
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@redhat.com>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
Oleg Nesterov <oleg@redhat.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Subject: [PATCH] uprobes: don't enable/disable signle step if the user did it
Date: Thu, 26 Jul 2012 17:20:43 +0200 [thread overview]
Message-ID: <1343316043-13475-1-git-send-email-bigeasy@linutronix.de> (raw)
If someone is using single stepping over uprobe brackpoint then after
we pass the uprobe single step, single stepping is disabled and the user
who enebaled them in the first place does not know anything about this.
This patch avoids enabling / disabling the single step mode if it is
already enabled.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
include/linux/uprobes.h | 2 ++
kernel/events/uprobes.c | 10 ++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h
index efe4b33..1be2d44 100644
--- a/include/linux/uprobes.h
+++ b/include/linux/uprobes.h
@@ -44,6 +44,8 @@ struct inode;
#define UPROBE_RUN_HANDLER 0x2
/* Can skip singlestep */
#define UPROBE_SKIP_SSTEP 0x4
+/* user does also singlestep */
+#define UPROBE_USER_SSTEP 0x8
struct uprobe_consumer {
int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs);
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index f935327..772eb3a 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -1528,7 +1528,10 @@ static void handle_swbp(struct pt_regs *regs)
utask->state = UTASK_SSTEP;
if (!pre_ssout(uprobe, regs, bp_vaddr)) {
- user_enable_single_step(current);
+ if (test_tsk_thread_flag(current, TIF_SINGLESTEP))
+ uprobe->flags |= UPROBE_USER_SSTEP;
+ else
+ user_enable_single_step(current);
return;
}
@@ -1569,7 +1572,10 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs)
put_uprobe(uprobe);
utask->active_uprobe = NULL;
utask->state = UTASK_RUNNING;
- user_disable_single_step(current);
+ if (uprobe->flags & UPROBE_USER_SSTEP)
+ uprobe->flags &= ~UPROBE_USER_SSTEP;
+ else
+ user_disable_single_step(current);
xol_free_insn_slot(current);
spin_lock_irq(¤t->sighand->siglock);
--
1.7.10.4
next reply other threads:[~2012-07-26 15:20 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-26 15:20 Sebastian Andrzej Siewior [this message]
2012-07-26 17:31 ` [PATCH] uprobes: don't enable/disable signle step if the user did it Oleg Nesterov
2012-07-27 17:39 ` Sebastian Andrzej Siewior
2012-07-27 18:04 ` Oleg Nesterov
2012-07-26 17:38 ` Sebastian Andrzej Siewior
2012-07-30 11:06 ` Ananth N Mavinakayanahalli
2012-07-30 14:16 ` Oleg Nesterov
2012-07-30 15:15 ` Sebastian Andrzej Siewior
2012-07-31 4:01 ` Ananth N Mavinakayanahalli
2012-07-31 5:22 ` Srikar Dronamraju
2012-07-31 17:38 ` Oleg Nesterov
2012-07-31 11:52 ` [PATCH 1/2] uprobes: Use a helper instead of ptrace's single step enable Sebastian Andrzej Siewior
2012-07-31 11:52 ` [PATCH 2/2] x86/uprobes: implement x86 specific arch_uprobe_*_step Sebastian Andrzej Siewior
2012-07-31 17:51 ` Oleg Nesterov
2012-07-31 19:30 ` Sebastian Andrzej Siewior
2012-08-01 12:26 ` Oleg Nesterov
2012-08-01 13:01 ` Q: user_enable_single_step() && update_debugctlmsr() Oleg Nesterov
2012-08-01 13:32 ` Sebastian Andrzej Siewior
2012-08-01 13:46 ` Oleg Nesterov
2012-08-01 13:54 ` Sebastian Andrzej Siewior
2012-08-01 14:01 ` Oleg Nesterov
2012-08-01 14:21 ` Sebastian Andrzej Siewior
2012-08-01 14:31 ` Oleg Nesterov
2012-08-01 14:47 ` Oleg Nesterov
2012-08-01 14:51 ` Sebastian Andrzej Siewior
2012-08-01 15:01 ` Oleg Nesterov
2012-08-01 15:12 ` Sebastian Andrzej Siewior
2012-08-01 15:14 ` Oleg Nesterov
2012-08-01 18:46 ` Sebastian Andrzej Siewior
2012-08-02 13:05 ` Oleg Nesterov
2012-08-02 13:20 ` Sebastian Andrzej Siewior
2012-08-02 13:24 ` Oleg Nesterov
2012-08-01 13:43 ` [PATCH 2/2] x86/uprobes: implement x86 specific arch_uprobe_*_step Oleg Nesterov
2012-08-02 4:58 ` Ananth N Mavinakayanahalli
2012-07-31 17:40 ` [PATCH 1/2] uprobes: Use a helper instead of ptrace's single step enable Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1343316043-13475-1-git-send-email-bigeasy@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=a.p.zijlstra@chello.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=srikar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).