summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm
diff options
context:
space:
mode:
authorDiana Craciun <diana.craciun@nxp.com>2018-12-12 16:03:05 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2018-12-20 22:59:03 +1100
commit10c5e83afd4a3f01712d97d3bb1ae34d5b74a185 (patch)
tree19f032a9630407a6b0d0bbfe13c44cb4573f57f1 /arch/powerpc/mm
parentf633a8ad636efb5d4bba1a047d4a0f1ef719aa06 (diff)
downloadlinux-10c5e83afd4a3f01712d97d3bb1ae34d5b74a185.tar.gz
linux-10c5e83afd4a3f01712d97d3bb1ae34d5b74a185.tar.bz2
linux-10c5e83afd4a3f01712d97d3bb1ae34d5b74a185.zip
powerpc/fsl: Flush the branch predictor at each kernel entry (64bit)
In order to protect against speculation attacks on indirect branches, the branch predictor is flushed at kernel entry to protect for the following situations: - userspace process attacking another userspace process - userspace process attacking the kernel Basically when the privillege level change (i.e. the kernel is entered), the branch predictor state is flushed. Signed-off-by: Diana Craciun <diana.craciun@nxp.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r--arch/powerpc/mm/tlb_low_64e.S7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/powerpc/mm/tlb_low_64e.S b/arch/powerpc/mm/tlb_low_64e.S
index 7fd20c52a8ec..9ed90064f542 100644
--- a/arch/powerpc/mm/tlb_low_64e.S
+++ b/arch/powerpc/mm/tlb_low_64e.S
@@ -70,6 +70,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
std r15,EX_TLB_R15(r12)
std r10,EX_TLB_CR(r12)
#ifdef CONFIG_PPC_FSL_BOOK3E
+START_BTB_FLUSH_SECTION
+ mfspr r11, SPRN_SRR1
+ andi. r10,r11,MSR_PR
+ beq 1f
+ BTB_FLUSH(r10)
+1:
+END_BTB_FLUSH_SECTION
std r7,EX_TLB_R7(r12)
#endif
TLB_MISS_PROLOG_STATS