On Fri, Jan 26, 2018 at 10:37:30AM +0000, David Woodhouse wrote: > On Tue, 2018-01-23 at 16:25 +0100, Peter Zijlstra wrote: > > This is boot code, we run this _way_ before userspace comes along to > > poison our branch predictor. > > Hm, objtool knows about sections, doesn't it? Why it is whining about > indirect jumps in inittext anyway? > > In fact, why are we even *doing* retpolines in inittext? Not that we > are; since we flipped the ALTERNATIVE logic around, at that point we > still have the 'oldinstr' which is a bare jmp anyway. We might as well > do this: > > --- a/include/linux/init.h > +++ b/include/linux/init.h > @@ -37,10 +37,15 @@ > * as gcc otherwise puts the data into the bss section and not into the init > * section. > */ > +#if defined(RETPOLINE) && !defined(MODULE) > +#define __noretpoline __attribute__((indirect_branch("keep"))) > +#else > +#define __noretpoline > +#endif > > /* These are for everybody (although not all archs will actually > discard it in modules) */ > -#define __init __section(.init.text) __cold __inittrace > __latent_entropy > +#define __init __section(.init.text) __cold __inittrace > __latent_entropy __noretpoline
We run module __init text concurrently with userspace.