All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H . Peter Anvin" <hpa@zytor.com>,
	Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	"David S . Miller" <davem@davemloft.net>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Ye Xiaolong <xiaolong.ye@intel.com>
Subject: Re: [RFC PATCH tip/master V2 4/8] kprobes/x86: Do not modify singlestep buffer while resuming
Date: Wed, 29 Mar 2017 00:28:14 +0900	[thread overview]
Message-ID: <20170329002814.b7d02fad5172ad718c1e9731@kernel.org> (raw)
In-Reply-To: <20170328070419.GA27268@gmail.com>

On Tue, 28 Mar 2017 09:04:19 +0200
Ingo Molnar <mingo@kernel.org> wrote:

> 
> * Masami Hiramatsu <mhiramat@kernel.org> wrote:
> 
> > Do not modify singlestep execution buffer (kprobe.ainsn.insn)
> > while resuming from single-stepping, instead, modifies
> > the buffer to add a jump back instruction at preparing
> > buffer.
> > 
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > ---
> >  arch/x86/kernel/kprobes/core.c |   42 +++++++++++++++++++---------------------
> >  1 file changed, 20 insertions(+), 22 deletions(-)
> > 
> > diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
> > index 6327f95..ea3b8e5 100644
> > --- a/arch/x86/kernel/kprobes/core.c
> > +++ b/arch/x86/kernel/kprobes/core.c
> > @@ -399,23 +399,36 @@ int __copy_instruction(u8 *dest, u8 *src)
> >  	return length;
> >  }
> >  
> > +/* Prepare reljump right after instruction to boost */
> > +static void prepare_boost(struct kprobe *p, int length)
> > +{
> > +	if (can_boost(p->ainsn.insn, p->addr) &&
> > +	    MAX_INSN_SIZE - length >= RELATIVEJUMP_SIZE) {
> > +		/*
> > +		 * These instructions can be executed directly if it
> > +		 * jumps back to correct address.
> > +		 */
> > +		synthesize_reljump((void *)p->ainsn.insn + length,
> > +				   (void *)p->addr + length);
> > +		p->ainsn.boostable = 1;
> > +	} else
> > +		p->ainsn.boostable = -1;
> 
> Those imbalanced curly braces are not proper kernel style.

Ah, OK, I'll fix that. 

> 
> Also, is the (void *) cast required? arch.insns ought to be void * already, right? 

Hmm, it is kprobe_opcode_t *, but anyway, on x86 it is same,, since kprobe_opcode_t
on x86 is u8.

> (I haven't checking whether that's true for all architectures.)

It is OK because this is x86 very specific code.

Thank you,

> 
> Btw., the original code had the curly braces right:
> 
> > -	if (p->ainsn.boostable == 0) {
> > -		if ((regs->ip > copy_ip) &&
> > -		    (regs->ip - copy_ip) + 5 < MAX_INSN_SIZE) {
> > -			/*
> > -			 * These instructions can be executed directly if it
> > -			 * jumps back to correct address.
> > -			 */
> > -			synthesize_reljump((void *)regs->ip,
> > -				(void *)orig_ip + (regs->ip - copy_ip));
> > -			p->ainsn.boostable = 1;
> > -		} else {
> > -			p->ainsn.boostable = -1;
> > -		}
> > -	}
> 
> Thanks,
> 
> 	Ingo


-- 
Masami Hiramatsu <mhiramat@kernel.org>

  reply	other threads:[~2017-03-28 15:28 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-27  7:48 [RFC PATCH tip/master V2 0/8] kprobes/x86: Make kprobes instruction buffers read-only Masami Hiramatsu
2017-03-27  7:49 ` [RFC PATCH tip/master V2 1/8] kprobes/x86: Fix not to boost call far instruction Masami Hiramatsu
2017-03-27  7:51 ` [RFC PATCH tip/master V2 2/8] kprobes/x86: Fix the description of __copy_instruction() Masami Hiramatsu
2017-03-27  7:52 ` [RFC PATCH tip/master V2 3/8] kprobes/x86: Use instruction decoder for booster Masami Hiramatsu
2017-03-27  7:53 ` [RFC PATCH tip/master V2 4/8] kprobes/x86: Do not modify singlestep buffer while resuming Masami Hiramatsu
2017-03-28  7:04   ` Ingo Molnar
2017-03-28 15:28     ` Masami Hiramatsu [this message]
2017-03-27  7:54 ` [RFC PATCH tip/master V2 5/8] kprobes/x86: Make boostable flag boolean Masami Hiramatsu
2017-03-27  7:56 ` [RFC PATCH tip/master V2 6/8] kprobes/x86: Set kprobes pages readonly Masami Hiramatsu
2017-03-27  7:57 ` [RFC PATCH tip/master V2 7/8] kprobes/x86: Use probe_kernel_read instead of memcpy Masami Hiramatsu
2017-03-27  7:58 ` [RFC PATCH tip/master V2 8/8] kprobes/x86: Consolidate insn decoder users for copying code Masami Hiramatsu

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=20170329002814.b7d02fad5172ad718c1e9731@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=aryabinin@virtuozzo.com \
    --cc=davem@davemloft.net \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=xiaolong.ye@intel.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.