All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Ingo Molnar <mingo@elte.hu>
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>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 1/4] uprobes/x86: Cleanup the usage of arch_uprobe->def.fixups, make it u8
Date: Fri, 25 Apr 2014 19:47:21 +0200	[thread overview]
Message-ID: <20140425174721.GA7966@redhat.com> (raw)
In-Reply-To: <20140425174704.GA7898@redhat.com>

handle_riprel_insn() assumes that nobody else could modify ->fixups
before. This is correct but fragile, change it to use "|=".

Also make ->fixups u8, we are going to add the new members into the
union. It is not clear why UPROBE_FIX_RIP_.X lived in the upper byte,
redefine them so that they can fit into u8.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
 arch/x86/include/asm/uprobes.h |    2 +-
 arch/x86/kernel/uprobes.c      |   14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/x86/include/asm/uprobes.h b/arch/x86/include/asm/uprobes.h
index 72caff7..9ce25ce 100644
--- a/arch/x86/include/asm/uprobes.h
+++ b/arch/x86/include/asm/uprobes.h
@@ -53,7 +53,7 @@ struct arch_uprobe {
 #ifdef CONFIG_X86_64
 			long	riprel_target;
 #endif
-			u16	fixups;
+			u8	fixups;
 		} 			def;
 	};
 };
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index 69b2d61..37e73b6 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -33,16 +33,16 @@
 /* Post-execution fixups. */
 
 /* Adjust IP back to vicinity of actual insn */
-#define UPROBE_FIX_IP		0x1
+#define UPROBE_FIX_IP		0x01
 
 /* Adjust the return address of a call insn */
-#define UPROBE_FIX_CALL	0x2
+#define UPROBE_FIX_CALL		0x02
 
 /* Instruction will modify TF, don't change it */
-#define UPROBE_FIX_SETF	0x4
+#define UPROBE_FIX_SETF		0x04
 
-#define UPROBE_FIX_RIP_AX	0x8000
-#define UPROBE_FIX_RIP_CX	0x4000
+#define UPROBE_FIX_RIP_AX	0x08
+#define UPROBE_FIX_RIP_CX	0x10
 
 #define	UPROBE_TRAP_NR		UINT_MAX
 
@@ -307,12 +307,12 @@ handle_riprel_insn(struct arch_uprobe *auprobe, struct insn *insn)
 		 * is NOT the register operand, so we use %rcx (register
 		 * #1) for the scratch register.
 		 */
-		auprobe->def.fixups = UPROBE_FIX_RIP_CX;
+		auprobe->def.fixups |= UPROBE_FIX_RIP_CX;
 		/* Change modrm from 00 000 101 to 00 000 001. */
 		*cursor = 0x1;
 	} else {
 		/* Use %rax (register #0) for the scratch register. */
-		auprobe->def.fixups = UPROBE_FIX_RIP_AX;
+		auprobe->def.fixups |= UPROBE_FIX_RIP_AX;
 		/* Change modrm from 00 xxx 101 to 00 xxx 000 */
 		*cursor = (reg << 3);
 	}
-- 
1.5.5.1


  reply	other threads:[~2014-04-25 17:47 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-17 20:02 [GIT PULL] uprobes: fix the handling of relative jmp/call's Oleg Nesterov
2014-04-18  8:35 ` Ingo Molnar
2014-04-19 17:01 ` [PATCH 0/5] uprobes/x86: cleanup validate_insn_* paths, fix X86_X32 case Oleg Nesterov
2014-04-19 17:01   ` [PATCH 1/5] uprobes/x86: Add uprobe_init_insn(), kill validate_insn_{32,64}bits() Oleg Nesterov
2014-04-29 10:04     ` Srikar Dronamraju
2014-04-19 17:01   ` [PATCH 2/5] uprobes/x86: Add is_64bit_mm(), kill validate_insn_bits() Oleg Nesterov
2014-04-29 10:05     ` Srikar Dronamraju
2014-04-19 17:01   ` [PATCH 3/5] uprobes/x86: Shift "insn_complete" from branch_setup_xol_ops() to uprobe_init_insn() Oleg Nesterov
2014-04-29 10:05     ` Srikar Dronamraju
2014-04-19 17:01   ` [PATCH 4/5] uprobes/x86: Make good_insns_* depend on CONFIG_X86_* Oleg Nesterov
2014-04-29 10:06     ` Srikar Dronamraju
2014-04-19 17:02   ` [PATCH 5/5] uprobes/x86: Fix is_64bit_mm() with CONFIG_X86_X32 Oleg Nesterov
2014-04-29 10:06     ` Srikar Dronamraju
2014-04-24 21:36   ` [PATCH 0/5] uprobes/x86: cleanup validate_insn_* paths, fix X86_X32 case Jim Keniston
2014-04-22 14:47 ` [PATCH 0/5] uprobes/x86: completely untangle branch_xol_ops and default_xol_ops Oleg Nesterov
2014-04-22 14:47   ` [PATCH 1/5] uprobes/x86: Don't change the task's state if ->pre_xol() fails Oleg Nesterov
2014-04-22 14:47   ` [PATCH 2/5] uprobes/x86: Introduce uprobe_xol_ops->abort() and default_abort_op() Oleg Nesterov
2014-04-22 14:47   ` [PATCH 3/5] uprobes/x86: Don't use arch_uprobe_abort_xol() in arch_uprobe_post_xol() Oleg Nesterov
2014-04-22 14:47   ` [PATCH 4/5] uprobes/x86: Move UPROBE_FIX_SETF logic from arch_uprobe_post_xol() to default_post_xol_op() Oleg Nesterov
2014-04-22 14:47   ` [PATCH 5/5] uprobes/x86: Move default_xol_ops's data into arch_uprobe->def Oleg Nesterov
2014-04-24 23:30     ` Jim Keniston
2014-04-25 19:53       ` Oleg Nesterov
2014-04-25 17:47 ` [PATCH 0/4] uprobes/x86: UPROBE_FIX_IP/UPROBE_FIX_CALL cleanups Oleg Nesterov
2014-04-25 17:47   ` Oleg Nesterov [this message]
2014-04-25 17:47   ` [PATCH 2/4] uprobes/x86: Introduce push_ret_address() Oleg Nesterov
2014-04-25 17:47   ` [PATCH 3/4] uprobes/x86: Kill adjust_ret_addr(), simplify UPROBE_FIX_CALL logic Oleg Nesterov
2014-04-25 17:47   ` [PATCH 4/4] uprobes/x86: Cleanup the usage of UPROBE_FIX_IP/UPROBE_FIX_CALL Oleg Nesterov
2014-04-27 13:51   ` [PATCH 0/4] uprobes/x86: UPROBE_FIX_IP/UPROBE_FIX_CALL cleanups Oleg Nesterov
2014-04-27 16:52 ` [PATCH 0/3] uprobes/x86: cleanup "riprel" functions Oleg Nesterov
2014-04-27 16:52   ` [PATCH 1/3] uprobes/x86: Rename *riprel* helpers to make the naming consistent Oleg Nesterov
2014-04-28  6:34     ` Srikar Dronamraju
2014-05-01  0:07       ` Jim Keniston
2014-04-27 16:52   ` [PATCH 2/3] uprobes/x86: Kill the "autask" arg of riprel_pre_xol() Oleg Nesterov
2014-04-28  6:35     ` Srikar Dronamraju
2014-05-01  0:07       ` Jim Keniston
2014-04-27 16:52   ` [PATCH 3/3] uprobes/x86: Simplify riprel_{pre,post}_xol() and make them similar Oleg Nesterov
2014-04-28  6:36     ` Srikar Dronamraju
2014-05-01  0:08       ` Jim Keniston

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=20140425174721.GA7966@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.