On Thu, 15 Mar 2018 20:15:52 +0100 Michal Suchanek <msucha...@suse.de> wrote:
> On powerpc syscall entry is done in assembly so patch in an explicit > barrier_nospec. Same comment as Linus for this -- the barriers are before the branch here, so is it possible the branch instruction can be speculative while the index is used to load the syscall table? Thanks, Nick > > Signed-off-by: Michal Suchanek <msucha...@suse.de> > --- > arch/powerpc/kernel/entry_64.S | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S > index 2cb5109a7ea3..7bfc4cf48af2 100644 > --- a/arch/powerpc/kernel/entry_64.S > +++ b/arch/powerpc/kernel/entry_64.S > @@ -36,6 +36,7 @@ > #include <asm/context_tracking.h> > #include <asm/tm.h> > #include <asm/ppc-opcode.h> > +#include <asm/barrier.h> > #include <asm/export.h> > #ifdef CONFIG_PPC_BOOK3S > #include <asm/exception-64s.h> > @@ -159,6 +160,7 @@ system_call: /* label this so stack > traces look sane */ > andi. r11,r10,_TIF_SYSCALL_DOTRACE > bne .Lsyscall_dotrace /* does not return */ > cmpldi 0,r0,NR_syscalls > + barrier_nospec > bge- .Lsyscall_enosys > > .Lsyscall: > @@ -319,6 +321,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) > ld r10,TI_FLAGS(r10) > > cmpldi r0,NR_syscalls > + barrier_nospec > blt+ .Lsyscall > > /* Return code is already in r3 thanks to do_syscall_trace_enter() */