All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Ingo Molnar <mingo@elte.hu>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Anton Arapov <aarapov@redhat.com>,
	David Long <dave.long@linaro.org>,
	Denys Vlasenko <dvlasenk@redhat.com>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Jim Keniston <jkenisto@us.ibm.com>,
	Jonathan Lebon <jlebon@redhat.com>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	linux-kernel@vger.kernel.org
Subject: [RFC PATCH v2 3/6] uprobes/x86: Emulate nop's using ops->emulate()
Date: Wed, 9 Apr 2014 21:44:31 +0200	[thread overview]
Message-ID: <20140409194431.GA6228@redhat.com> (raw)
In-Reply-To: <20140409194401.GA5854@redhat.com>

Finally we can kill the ugly (and very limited) code in __skip_sstep().
Just change ttt_setup_xol_ops() to treat "nop" as jmp to the next insn.

Thanks to lib/insn.c, it is clever enough. OPCODE1() == 0x90 includes
"(rep;)+ nop;" at least, and (afaics) much more.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
 arch/x86/kernel/uprobes.c |   20 +-------------------
 1 files changed, 1 insertions(+), 19 deletions(-)

diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index 1cdc379..23a16a5 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -478,6 +478,7 @@ static int ttt_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
 	switch (OPCODE1(insn)) {
 	case 0xeb:	/* jmp 8 */
 	case 0xe9:	/* jmp 32 */
+	case 0x90:	/* prefix* + nop; same as jmp with .disp = 0 */
 		break;
 	default:
 		return -ENOSYS;
@@ -710,29 +711,10 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
 		regs->flags &= ~X86_EFLAGS_TF;
 }
 
-/*
- * Skip these instructions as per the currently known x86 ISA.
- * rep=0x66*; nop=0x90
- */
 static bool __skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
 {
-	int i;
-
 	if (auprobe->ops->emulate)
 		return auprobe->ops->emulate(auprobe, regs);
-
-	/* TODO: move this code into ->emulate() hook */
-	for (i = 0; i < MAX_UINSN_BYTES; i++) {
-		if (auprobe->insn[i] == 0x66)
-			continue;
-
-		if (auprobe->insn[i] == 0x90) {
-			regs->ip += i + 1;
-			return true;
-		}
-
-		break;
-	}
 	return false;
 }
 
-- 
1.5.5.1


  parent reply	other threads:[~2014-04-09 19:44 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-04 18:50 [PATCH v2 0/9] uprobes/x86: preparations to fix the reprel jmp/call handling Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 1/9] uprobes: Kill UPROBE_SKIP_SSTEP and can_skip_sstep() Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 2/9] uprobes/x86: Fold prepare_fixups() into arch_uprobe_analyze_insn() Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 3/9] uprobes/x86: Kill the "ia32_compat" check in handle_riprel_insn(), remove "mm" arg Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 4/9] uprobes/x86: Gather "riprel" functions together Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 5/9] uprobes/x86: move the UPROBE_FIX_{RIP,IP,CALL} code at the end of pre/post hooks Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 6/9] uprobes/x86: Introduce uprobe_xol_ops and arch_uprobe->ops Oleg Nesterov
2014-04-08  9:10   ` Masami Hiramatsu
2014-04-08 16:10     ` Oleg Nesterov
2014-04-08 18:10       ` Oleg Nesterov
2014-04-09 12:58       ` Masami Hiramatsu
2014-04-09 16:55         ` Oleg Nesterov
2014-04-10 13:58           ` Masami Hiramatsu
2014-04-04 18:51 ` [PATCH v2 7/9] uprobes/x86: Conditionalize the usage of handle_riprel_insn() Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 8/9] uprobes/x86: Send SIGILL if arch_uprobe_post_xol() fails Oleg Nesterov
2014-04-04 18:51 ` [PATCH v2 9/9] uprobes/x86: Teach arch_uprobe_post_xol() to restart if possible Oleg Nesterov
2014-04-04 21:56   ` Jim Keniston
2014-04-05 12:46     ` Oleg Nesterov
2014-04-04 19:32 ` [PATCH v2 0/9] uprobes/x86: preparations to fix the reprel jmp/call handling Oleg Nesterov
2014-04-04 19:52   ` Oleg Nesterov
2014-04-04 23:44   ` Jim Keniston
2014-04-06 20:15     ` [RFC PATCH 0/6] uprobes/x86: " Oleg Nesterov
2014-04-06 20:16       ` [RFC PATCH 1/6] uprobes/x86: Emulate unconditional rip-relative jmp's Oleg Nesterov
2014-04-08 20:36         ` Jim Keniston
2014-04-09 14:47           ` Oleg Nesterov
2014-04-06 20:16       ` [RFC PATCH 2/6] uprobes/x86: Emulate nop's using ops->emulate() Oleg Nesterov
2014-04-06 20:16       ` [RFC PATCH 3/6] uprobes/x86: Introduce sizeof_long(), cleanup adjust_ret_addr() and arch_uretprobe_hijack_return_addr() Oleg Nesterov
2014-04-07 20:34         ` Jim Keniston
2014-04-07 20:42           ` Jim Keniston
2014-04-06 20:16       ` [RFC PATCH 4/6] uprobes/x86: Emulate rip-relative call's Oleg Nesterov
2014-04-08 22:26         ` Jim Keniston
2014-04-09 15:43           ` Oleg Nesterov
2014-04-09 21:25             ` Jim Keniston
2014-04-10  4:05               ` Jim Keniston
2014-04-10 13:41             ` Denys Vlasenko
2014-04-10 13:57               ` Masami Hiramatsu
2014-04-10 14:20                 ` Denys Vlasenko
2014-04-11  3:03                   ` Masami Hiramatsu
2014-04-11 12:23                     ` Denys Vlasenko
2014-04-14 14:22                       ` Masami Hiramatsu
2014-04-18 15:17                         ` Denys Vlasenko
2014-04-10 14:28                 ` Oleg Nesterov
2014-04-10 17:00                   ` Oleg Nesterov
2014-04-11  2:38                     ` Masami Hiramatsu
2014-04-11  1:29                   ` Masami Hiramatsu
2014-04-10 14:18               ` Oleg Nesterov
2014-04-10 14:30                 ` Denys Vlasenko
2014-04-10 17:02                   ` Denys Vlasenko
2014-04-14  5:14                     ` Masami Hiramatsu
2014-04-14 12:24                       ` Denys Vlasenko
2014-04-14 14:05                         ` Masami Hiramatsu
2014-04-06 20:16       ` [RFC PATCH 5/6] uprobes/x86: Emulate rip-relative conditional "short" jmp's Oleg Nesterov
2014-04-07 14:27         ` [RFC PATCH v2 " Oleg Nesterov
2014-04-07 16:41           ` Oleg Nesterov
2014-04-08 22:53           ` Jim Keniston
2014-04-09 16:42             ` Oleg Nesterov
2014-04-06 20:16       ` [RFC PATCH 6/6] uprobes/x86: Emulate rip-relative conditional "near" jmp's Oleg Nesterov
2014-04-07 14:28         ` Oleg Nesterov
2014-04-08 23:07           ` Jim Keniston
2014-04-09 16:50             ` Oleg Nesterov
2014-04-07 18:54       ` [RFC PATCH 0/6] uprobes/x86: fix the reprel jmp/call handling Jim Keniston
2014-04-08 11:43       ` Masami Hiramatsu
2014-04-08 16:28         ` Oleg Nesterov
2014-04-08 19:26           ` Oleg Nesterov
2014-04-09 19:44       ` [RFC PATCH v2 " Oleg Nesterov
2014-04-09 19:44         ` [RFC PATCH v2 1/6] uprobes/x86: Introduce sizeof_long(), cleanup adjust_ret_addr() and arch_uretprobe_hijack_return_addr() Oleg Nesterov
2014-04-09 19:44         ` [RFC PATCH v2 2/6] uprobes/x86: Emulate unconditional rip-relative jmp's Oleg Nesterov
2014-04-10 12:37           ` Denys Vlasenko
2014-04-10 13:47             ` Oleg Nesterov
2014-04-09 19:44         ` Oleg Nesterov [this message]
2014-04-09 19:44         ` [RFC PATCH v2 4/6] uprobes/x86: Emulate rip-relative call's Oleg Nesterov
2014-04-10 12:53           ` Denys Vlasenko
2014-04-10 13:15             ` Masami Hiramatsu
2014-04-10 13:41               ` Oleg Nesterov
2014-04-09 19:44         ` [RFC PATCH v2 5/6] uprobes/x86: Emulate rip-relative conditional "short" jmp's Oleg Nesterov
2014-04-09 19:44         ` [RFC PATCH v2 6/6] uprobes/x86: Emulate rip-relative conditional "near" jmp's Oleg Nesterov
2014-04-10 12:49           ` Denys Vlasenko
2014-04-09 21:34         ` [RFC PATCH v2 0/6] uprobes/x86: fix the reprel jmp/call handling Jim Keniston
2014-04-10 12:28         ` Denys Vlasenko

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=20140409194431.GA6228@redhat.com \
    --to=oleg@redhat.com \
    --cc=aarapov@redhat.com \
    --cc=ananth@in.ibm.com \
    --cc=dave.long@linaro.org \
    --cc=dvlasenk@redhat.com \
    --cc=fche@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --cc=jlebon@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@elte.hu \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.