On Mon, May 18, 2020 at 08:53:49PM +0200, Thomas Gleixner wrote:
> Peter Zijlstra <pet...@infradead.org> 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?

Reply via email to