[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20170725224547.1a756a301c6c57738efe9d95@kernel.org>
Date: Tue, 25 Jul 2017 22:45:47 +0900
From: Masami Hiramatsu <mhiramat@...nel.org>
To: Ingo Molnar <mingo@...nel.org>
Cc: Francis Deslauriers <francis.deslauriers@...icios.com>,
mathieu.desnoyers@...icios.com,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H . Peter Anvin" <hpa@...or.com>, x86@...nel.org,
Ananth N Mavinakayanahalli <ananth@...ibm.com>,
Anil S Keshavamurthy <anil.s.keshavamurthy@...el.com>,
"David S . Miller" <davem@...emloft.net>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH -tip V2] [BUGFIX] kprobes/x86: Do not jump-optimize
kprobes on irq entry code
On Tue, 25 Jul 2017 12:40:05 +0200
Ingo Molnar <mingo@...nel.org> wrote:
>
> * Masami Hiramatsu <mhiramat@...nel.org> wrote:
>
> > Since the kernel segment registers are not prepared at the
> > entry of irq-entry code, if a kprobe on such code is
> > jump-optimized, accessing per-cpu variables may cause
> > kernel panic.
> > However, if the kprobe is not optimized, it kicks int3
> > exception and set segment registers correctly.
> >
> > This checks probe-address and if it is in irq-entry code,
> > it prohibits optimizing such kprobes. This means we can
> > continuously probing such interrupt handlers by kprobes
> > but it is not optimized anymore.
> >
> > Signed-off-by: Masami Hiramatsu <mhiramat@...nel.org>
> > Reported-by: Francis Deslauriers <francis.deslauriers@...icios.com>
> > Tested-by: Francis Deslauriers <francis.deslauriers@...icios.com>
> > ---
> > Changes in V2:
> > - Make changes in kprobe/opt.c local, not involving unwind,
> > since it requires CONFIG_FRAME_POINTER=y (Thanks Mathieu!)
>
> This patch doesn't even build on x86-64 defconfig ...
>
> arch/x86/kernel/kprobes/opt.c: In function ‘can_optimize’:
> arch/x86/kernel/kprobes/opt.c:259:32: error: ‘__irqentry_text_start’ undeclared
> (first use in this function)
> ((paddr >= (unsigned long)__irqentry_text_start) &&
> ^~~~~~~~~~~~~~~~~~~~~
Oops, yes, hmm, I missed below ifdef...
#if defined(CONFIG_FUNCTION_GRAPH_TRACER) || defined(CONFIG_KASAN)
Or, I think we can define those as NULL in interrupt.h.
Thanks,
>
> Thanks,
>
> Ingo
--
Masami Hiramatsu <mhiramat@...nel.org>
Powered by blists - more mailing lists