From: Roland McGrath <roland@redhat.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: "K.Prasad" <prasad@linux.vnet.ibm.com>,
Alan Stern <stern@rowland.harvard.edu>,
Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org, utrace-devel@redhat.com
Subject: Re: x86: do_debug && PTRACE_SINGLESTEP broken by 08d68323d1f0c34452e614263b212ca556dae47f
Date: Thu, 17 Dec 2009 17:40:21 -0800 (PST) [thread overview]
Message-ID: <20091218014021.CB474135F@magilla.sf.frob.com> (raw)
In-Reply-To: Oleg Nesterov's message of Friday, 18 December 2009 01:56:50 +0100 <20091218005650.GA20667@redhat.com>
Comparing to the old (2.6.32) logic, I think it might be this (untested).
I also note this is the sole use of get_si_code, seems like it should
just be rolled in here.
Thanks,
Roland
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 3339917..16a88f5 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -530,7 +530,6 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk = current;
unsigned long dr6;
- int si_code;
get_debugreg(dr6, 6);
@@ -569,14 +568,15 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
* We already checked v86 mode above, so we can check for kernel mode
* by just checking the CPL of CS.
*/
+ dr6 = tsk->thread.debugreg6;
if ((dr6 & DR_STEP) && !user_mode(regs)) {
tsk->thread.debugreg6 &= ~DR_STEP;
set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
regs->flags &= ~X86_EFLAGS_TF;
+ } else if (dr6 & (DR_STEP | DR_TRAP_BITS)) {
+ send_sigtrap(tsk, regs, error_code, get_si_code(dr6));
}
- si_code = get_si_code(tsk->thread.debugreg6);
- if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS))
- send_sigtrap(tsk, regs, error_code, si_code);
+
preempt_conditional_cli(regs);
return;
next prev parent reply other threads:[~2009-12-18 1:40 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-18 0:56 Oleg Nesterov
2009-12-18 1:40 ` Roland McGrath [this message]
2009-12-18 2:10 ` Oleg Nesterov
2009-12-18 2:58 ` Frederic Weisbecker
2009-12-18 3:09 ` Frederic Weisbecker
2009-12-18 3:53 ` Roland McGrath
2009-12-18 3:06 ` Frederic Weisbecker
2009-12-18 17:27 ` Oleg Nesterov
2009-12-18 17:58 ` K.Prasad
2009-12-18 18:24 ` Oleg Nesterov
2009-12-18 20:05 ` Roland McGrath
2009-12-18 22:32 ` Oleg Nesterov
2009-12-21 10:22 ` Jan Kiszka
2009-12-21 16:53 ` Oleg Nesterov
2009-12-21 16:48 ` Jan Kiszka
2009-12-18 23:15 ` Frederic Weisbecker
2009-12-20 8:30 ` Avi Kivity
2009-12-18 17:37 ` K.Prasad
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=20091218014021.CB474135F@magilla.sf.frob.com \
--to=roland@redhat.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@redhat.com \
--cc=prasad@linux.vnet.ibm.com \
--cc=stern@rowland.harvard.edu \
--cc=utrace-devel@redhat.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
Powered by JetHome