powerpc/fsl: Add infrastructure to fixup branch predictor flush
In order to protect against speculation attacks (Spectre variant 2) on NXP PowerPC platforms, the branch predictor should be flushed when the privillege level is changed. This patch is adding the infrastructure to fixup at runtime the code sections that are performing the branch predictor flush depending on a boot arg parameter which is added later in a separate patch. Signed-off-by: Diana Craciun <diana.craciun@nxp.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
f242e0ac95
commit
76a5eaa38b
@@ -347,6 +347,29 @@ void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_
|
||||
|
||||
printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
|
||||
}
|
||||
|
||||
static void patch_btb_flush_section(long *curr)
|
||||
{
|
||||
unsigned int *start, *end;
|
||||
|
||||
start = (void *)curr + *curr;
|
||||
end = (void *)curr + *(curr + 1);
|
||||
for (; start < end; start++) {
|
||||
pr_devel("patching dest %lx\n", (unsigned long)start);
|
||||
patch_instruction(start, PPC_INST_NOP);
|
||||
}
|
||||
}
|
||||
|
||||
void do_btb_flush_fixups(void)
|
||||
{
|
||||
long *start, *end;
|
||||
|
||||
start = PTRRELOC(&__start__btb_flush_fixup);
|
||||
end = PTRRELOC(&__stop__btb_flush_fixup);
|
||||
|
||||
for (; start < end; start += 2)
|
||||
patch_btb_flush_section(start);
|
||||
}
|
||||
#endif /* CONFIG_PPC_FSL_BOOK3E */
|
||||
|
||||
void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
|
||||
|
Reference in New Issue
Block a user