Re: [patch V6 00/37] x86/entry: Rework leftovers and merge plan

From: Peter Zijlstra
Date: Tue May 19 2020 - 04:35:04 EST


On Mon, May 18, 2020 at 08:53:49PM +0200, Thomas Gleixner wrote:
> Peter Zijlstra <peterz@xxxxxxxxxxxxx> writes:
> > So on top of you entry-v8-full; I had to chase one of those
> > instrumentation_end() escapes an (extended) basic block chase (again!).
> >
> > +#ifdef CONFIG_DEBUG_ENTRY
>
> Why this? We lose the kprobes runtime protection that way.

Oh bugger indeed. I forgot about that :-(

I added the CONFIG_DEBUG_ENTRY dependency to
instrumentation_{begin,end}() because they now emit actual code, and I
figured we shouldn't bother 'production' kernels with all them extra
NOPs.

And then I figured (wrongly!) that since I have that, I might as well
add noinstr to is.

> > +/* Section for code which can't be instrumented at all */
> > +#define noinstr \
> > + noinline notrace __attribute((__section__(".noinstr.text")))
> > +
> > /* Begin/end of an instrumentation safe region */
> > -#define instrumentation_begin() ({ \
> > +#define instrumentation_begin() ({ \
> > asm volatile("%c0:\n\t" \
> > ".pushsection .discard.instr_begin\n\t" \
> > ".long %c0b - .\n\t" \
> > ".popsection\n\t" : : "i" (__COUNTER__));
>
> Nifty.

Yeah, took a bit of fiddling because objtool is a bit weird vs UD2, but
if you order it just right in the WARN thing it works :-)

You want a new delta without the noinstr thing on?