From: Oleg Nesterov <oleg@redhat.com>
To: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
Linux-mm <linux-mm@kvack.org>,
Arnaldo Carvalho de Melo <acme@infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Jonathan Corbet <corbet@lwn.net>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
Hugh Dickins <hughd@google.com>,
Christoph Hellwig <hch@infradead.org>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Andi Kleen <andi@firstfloor.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jim Keniston <jkenisto@linux.vnet.ibm.com>,
Roland McGrath <roland@hack.frob.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH 13/X] uprobes: introduce UTASK_SSTEP_TRAPPED logic
Date: Wed, 19 Oct 2011 23:53:44 +0200 [thread overview]
Message-ID: <20111019215344.GG16395@redhat.com> (raw)
In-Reply-To: <20111019215139.GA16395@redhat.com>
Finally, add UTASK_SSTEP_TRAPPED state/code to handle the case when
xol insn itself triggers the signal.
In this case we should restart the original insn even if the task is
already SIGKILL'ed (say, the coredump should report the correct ip).
This is even more important if the task has a handler for SIGSEGV/etc,
The _same_ instruction should be repeated again after return from the
signal handler, and SSTEP can never finish in this case.
So this patch changes uprobe_deny_signal() to set UTASK_SSTEP_TRAPPED
and TIF_UPROBE. It also sets TIF_NOTIFY_RESUME, _afaics_ TIF_UPROBE
alone is not enough to trigger do_notify_resume() in this case.
When uprobe_notify_resume() sees UTASK_SSTEP_TRAPPED it does abort_xol()
instead of post_xol().
---
arch/x86/kernel/uprobes.c | 1 +
include/linux/uprobes.h | 1 +
kernel/uprobes.c | 8 ++++++++
3 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index bc11a89..73f58ad 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -550,6 +550,7 @@ int post_xol(struct uprobe *uprobe, struct pt_regs *regs)
int result = 0;
long correction;
+ WARN_ON_ONCE(current->thread.trap_no != UPROBE_TRAP_NO);
current->thread.trap_no = utask->tskinfo.saved_trap_no;
correction = (long)(utask->vaddr - utask->xol_vaddr);
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h
index 27928e5..2b4bc8c 100644
--- a/include/linux/uprobes.h
+++ b/include/linux/uprobes.h
@@ -76,6 +76,7 @@ enum uprobe_task_state {
UTASK_BP_HIT,
UTASK_SSTEP,
UTASK_SSTEP_ACK,
+ UTASK_SSTEP_TRAPPED,
};
/*
diff --git a/kernel/uprobes.c b/kernel/uprobes.c
index d6f4508..aa5492a 100644
--- a/kernel/uprobes.c
+++ b/kernel/uprobes.c
@@ -1334,6 +1334,12 @@ bool uprobe_deny_signal(void)
spin_lock_irq(&tsk->sighand->siglock);
clear_tsk_thread_flag(tsk, TIF_SIGPENDING);
spin_unlock_irq(&tsk->sighand->siglock);
+
+ if (xol_was_trapped(tsk)) {
+ utask->state = UTASK_SSTEP_TRAPPED;
+ set_tsk_thread_flag(tsk, TIF_UPROBE);
+ set_tsk_thread_flag(tsk, TIF_NOTIFY_RESUME);
+ }
}
return true;
@@ -1389,6 +1395,8 @@ void uprobe_notify_resume(struct pt_regs *regs)
if (utask->state == UTASK_SSTEP_ACK)
post_xol(u, regs); /* TODO: check result? */
+ else if (utask->state == UTASK_SSTEP_TRAPPED)
+ abort_xol(regs);
else
WARN_ON_ONCE(1);
--
1.5.5.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2011-10-19 21:58 UTC|newest]
Thread overview: 160+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-20 11:59 [PATCH v5 3.1.0-rc4-tip 0/26] Uprobes patchset with perf probe support Srikar Dronamraju
2011-09-20 11:59 ` [PATCH v5 3.1.0-rc4-tip 1/26] uprobes: Auxillary routines to insert, find, delete uprobes Srikar Dronamraju
2011-09-20 15:42 ` Stefan Hajnoczi
2011-09-26 11:18 ` Peter Zijlstra
2011-09-26 11:59 ` Srikar Dronamraju
2011-09-26 11:18 ` Peter Zijlstra
2011-09-26 12:02 ` Srikar Dronamraju
2011-09-26 13:35 ` Peter Zijlstra
2011-09-26 16:19 ` Srikar Dronamraju
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 2/26] Uprobes: Allow multiple consumers for an uprobe Srikar Dronamraju
2011-09-26 12:29 ` Peter Zijlstra
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 3/26] Uprobes: register/unregister probes Srikar Dronamraju
2011-09-20 16:50 ` Stefan Hajnoczi
2011-09-21 4:07 ` Srikar Dronamraju
2011-09-26 13:15 ` Peter Zijlstra
2011-09-26 13:23 ` Srikar Dronamraju
2011-10-03 12:46 ` Oleg Nesterov
2011-10-05 17:04 ` Srikar Dronamraju
2011-10-05 18:50 ` Oleg Nesterov
2011-10-06 6:51 ` Srikar Dronamraju
2011-10-07 17:03 ` Oleg Nesterov
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 4/26] uprobes: Define hooks for mmap/munmap Srikar Dronamraju
2011-09-20 17:03 ` Stefan Hajnoczi
2011-09-21 4:03 ` Srikar Dronamraju
2011-09-26 13:53 ` Peter Zijlstra
2011-09-26 15:44 ` Srikar Dronamraju
2011-09-27 11:37 ` Peter Zijlstra
2011-09-27 13:08 ` Srikar Dronamraju
2011-09-27 11:41 ` Peter Zijlstra
2011-09-27 12:59 ` Srikar Dronamraju
2011-09-27 11:42 ` Peter Zijlstra
2011-10-03 13:37 ` Oleg Nesterov
2011-10-06 11:05 ` Srikar Dronamraju
2011-10-07 17:36 ` Oleg Nesterov
2011-10-10 12:31 ` Srikar Dronamraju
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 5/26] Uprobes: copy of the original instruction Srikar Dronamraju
2011-10-03 16:29 ` Oleg Nesterov
2011-10-05 10:52 ` Srikar Dronamraju
2011-10-05 15:11 ` Oleg Nesterov
2011-10-05 16:09 ` Srikar Dronamraju
2011-10-05 17:53 ` Oleg Nesterov
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 6/26] Uprobes: define fixups Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 7/26] Uprobes: uprobes arch info Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 8/26] x86: analyze instruction and determine fixups Srikar Dronamraju
2011-09-20 17:13 ` Stefan Hajnoczi
2011-09-20 18:12 ` Christoph Hellwig
2011-09-20 20:53 ` Stefan Hajnoczi
2011-09-23 11:53 ` Masami Hiramatsu
2011-09-23 16:51 ` Stefan Hajnoczi
2011-09-26 19:59 ` Josh Stone
2011-09-27 1:32 ` Masami Hiramatsu
2011-09-27 2:59 ` Josh Stone
2011-09-27 7:08 ` Stefan Hajnoczi
2011-09-22 1:05 ` Josh Stone
2011-10-05 15:48 ` Oleg Nesterov
2011-10-05 16:12 ` Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 9/26] Uprobes: Background page replacement Srikar Dronamraju
2011-10-05 16:19 ` Oleg Nesterov
2011-10-06 6:53 ` Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 10/26] x86: Set instruction pointer Srikar Dronamraju
2011-10-05 16:29 ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 11/26] x86: Introduce TIF_UPROBE FLAG Srikar Dronamraju
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 12/26] Uprobes: Handle breakpoint and Singlestep Srikar Dronamraju
2011-09-26 13:59 ` Peter Zijlstra
2011-09-26 16:01 ` Srikar Dronamraju
2011-09-26 16:25 ` Peter Zijlstra
2011-10-05 17:48 ` Oleg Nesterov
2011-09-26 14:02 ` Peter Zijlstra
2011-10-07 18:28 ` Oleg Nesterov
2011-10-09 13:31 ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 13/26] x86: define a x86 specific exception notifier Srikar Dronamraju
2011-09-26 14:19 ` Peter Zijlstra
2011-09-26 15:52 ` Srikar Dronamraju
2011-09-27 11:46 ` Peter Zijlstra
2011-10-07 18:31 ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 14/26] uprobe: register " Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 15/26] x86: Define x86_64 specific uprobe_task_arch_info structure Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 16/26] uprobes: Introduce " Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 17/26] x86: arch specific hooks for pre/post singlestep handling Srikar Dronamraju
2011-09-26 14:23 ` Peter Zijlstra
2011-09-26 16:34 ` Srikar Dronamraju
2011-09-27 11:44 ` Peter Zijlstra
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 18/26] uprobes: slot allocation Srikar Dronamraju
2011-09-27 11:49 ` Peter Zijlstra
2011-09-27 12:32 ` Srikar Dronamraju
2011-09-27 12:59 ` Peter Zijlstra
2011-09-27 12:18 ` Peter Zijlstra
2011-09-27 12:45 ` Srikar Dronamraju
2011-09-27 12:36 ` Peter Zijlstra
2011-09-27 12:37 ` Peter Zijlstra
2011-09-27 12:50 ` Srikar Dronamraju
2011-09-27 12:50 ` Peter Zijlstra
2011-09-27 12:55 ` Peter Zijlstra
2011-10-07 18:37 ` Oleg Nesterov
2011-10-09 11:47 ` Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 19/26] tracing: Extract out common code for kprobes/uprobes traceevents Srikar Dronamraju
2011-09-28 5:04 ` Masami Hiramatsu
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 20/26] tracing: uprobes trace_event interface Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 21/26] tracing: uprobes Documentation Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 22/26] perf: rename target_module to target Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 23/26] perf: perf interface for uprobes Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 24/26] perf: show possible probes in a given executable file or library Srikar Dronamraju
2011-09-20 12:05 ` [PATCH v5 3.1.0-rc4-tip 25/26] perf: Documentation for perf uprobes Srikar Dronamraju
2011-09-28 9:20 ` Masami Hiramatsu
2011-09-20 12:05 ` [PATCH v5 3.1.0-rc4-tip 26/26] uprobes: queue signals while thread is singlestepping Srikar Dronamraju
2011-09-27 13:03 ` Peter Zijlstra
2011-09-27 13:12 ` Srikar Dronamraju
2011-10-05 18:01 ` Oleg Nesterov
2011-10-06 5:47 ` Srikar Dronamraju
2011-10-07 16:58 ` Oleg Nesterov
2011-10-10 12:25 ` Srikar Dronamraju
2011-10-10 18:25 ` Oleg Nesterov
2011-10-11 17:24 ` Oleg Nesterov
2011-10-11 17:38 ` Srikar Dronamraju
2011-10-11 17:26 ` Srikar Dronamraju
2011-10-11 18:56 ` Oleg Nesterov
2011-10-12 12:01 ` Srikar Dronamraju
2011-10-12 19:34 ` Oleg Nesterov
2011-10-12 19:59 ` Oleg Nesterov
2011-09-20 13:34 ` [PATCH v5 3.1.0-rc4-tip 0/26] Uprobes patchset with perf probe support Christoph Hellwig
2011-09-20 14:12 ` Srikar Dronamraju
2011-09-20 14:28 ` Christoph Hellwig
2011-09-20 15:19 ` Srikar Dronamraju
2011-10-15 19:00 ` [PATCH 0/X] (Was: Uprobes patchset with perf probe support) Oleg Nesterov
2011-10-15 19:00 ` [PATCH 1/X] uprobes: write_opcode: the new page needs PG_uptodate Oleg Nesterov
2011-10-17 10:59 ` Srikar Dronamraju
2011-10-15 19:00 ` [PATCH 2/X] uprobes: write_opcode() needs put_page(new_page) unconditionally Oleg Nesterov
2011-10-18 16:47 ` Srikar Dronamraju
2011-10-15 19:01 ` [PATCH 3/X] uprobes: xol_add_vma: fix ->uprobes_xol_area initialization Oleg Nesterov
2011-10-15 19:01 ` [PATCH 4/X] uprobes: xol_add_vma: misc cleanups Oleg Nesterov
2011-10-15 19:01 ` [PATCH 5/X] uprobes: xol_alloc_area() needs memory barriers Oleg Nesterov
2011-10-16 16:13 ` [PATCH 6/X] uprobes: reimplement xol_add_vma() via install_special_mapping() Oleg Nesterov
2011-10-17 10:50 ` Srikar Dronamraju
2011-10-17 13:34 ` Stephen Smalley
2011-10-17 18:55 ` Oleg Nesterov
2011-10-16 16:14 ` [PATCH 7/X] uprobes: xol_add_vma: simply use TASK_SIZE as a hint Oleg Nesterov
2011-10-19 21:51 ` [PATCH 8-14/X] (Was: Uprobes patchset with perf probe support) Oleg Nesterov
2011-10-19 21:52 ` [PATCH 8/X] uprobes: kill sstep_complete() Oleg Nesterov
2011-10-19 21:52 ` [PATCH 9/X] uprobes: introduce UTASK_SSTEP_ACK state Oleg Nesterov
2011-10-19 21:52 ` [PATCH 10/X] uprobes: introduce uprobe_deny_signal() Oleg Nesterov
2011-10-19 21:53 ` [PATCH 11/X] uprobes: x86: introduce xol_was_trapped() Oleg Nesterov
2011-10-24 14:55 ` Srikar Dronamraju
2011-10-24 16:07 ` Oleg Nesterov
2011-10-19 21:53 ` [PATCH 12/X] uprobes: x86: introduce abort_xol() Oleg Nesterov
2011-10-21 14:42 ` Srikar Dronamraju
2011-10-21 16:22 ` Oleg Nesterov
2011-10-21 16:26 ` Ananth N Mavinakayanahalli
2011-10-21 16:42 ` Oleg Nesterov
2011-10-21 17:59 ` test-case (Was: [PATCH 12/X] uprobes: x86: introduce abort_xol()) Oleg Nesterov
2011-10-25 14:06 ` Srikar Dronamraju
2011-10-25 15:49 ` Oleg Nesterov
2011-10-22 7:09 ` [PATCH 12/X] uprobes: x86: introduce abort_xol() Ananth N Mavinakayanahalli
2011-10-19 21:53 ` Oleg Nesterov [this message]
2011-10-22 7:20 ` [PATCH 13/X] uprobes: introduce UTASK_SSTEP_TRAPPED logic Ananth N Mavinakayanahalli
2011-10-24 14:41 ` Oleg Nesterov
2011-10-24 15:16 ` Ananth N Mavinakayanahalli
2011-10-24 16:13 ` Oleg Nesterov
2011-10-25 6:01 ` Ananth N Mavinakayanahalli
2011-10-25 14:30 ` Oleg Nesterov
2011-10-19 21:54 ` [PATCH 14/X] uprobes: uprobe_deny_signal: check __fatal_signal_pending() 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=20111019215344.GG16395@redhat.com \
--to=oleg@redhat.com \
--cc=acme@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=ananth@in.ibm.com \
--cc=andi@firstfloor.org \
--cc=corbet@lwn.net \
--cc=hch@infradead.org \
--cc=hughd@google.com \
--cc=jkenisto@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=roland@hack.frob.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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).