Patch "x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support" has been added to the 4.15-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86speculation_Add_basic_IBPB_(Indirect_Branch_Prediction_Barrier)_support.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Subject: x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support
From: David Woodhouse [email protected]
Date: Thu Jan 25 16:14:15 2018 +0000
From: David Woodhouse [email protected]
commit 20ffa1caecca4db8f79fe665acdeaa5af815a24d
Expose indirect_branch_prediction_barrier() for use in subsequent patches.
[ tglx: Add IBPB status to spectre_v2 sysfs file ]
--- arch/x86/include/asm/cpufeatures.h | 2 ++ arch/x86/include/asm/nospec-branch.h | 13 +++++++++++++ arch/x86/kernel/cpu/bugs.c | 10 +++++++++- 3 files changed, 24 insertions(+), 1 deletion(-)
arch/x86/include/asm/cpufeatures.h +2 -0
@@ -210,6 +210,8 @@#define X86_FEATURE_MBA ( 7*32+18)/* Memory Bandwidth Allocation */ #define X86_FEATURE_RSB_CTXSW ( 7*32+19)/* Fill RSB on context switches */ +#define X86_FEATURE_IBPB ( 7*32+21)/* Indirect Branch Prediction Barrier enabled*/ +/* Virtualization flags: Linux defined, word 8 */ #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0)/* Intel TPR Shadow */ #define X86_FEATURE_VNMI ( 8*32+ 1)/* Intel Virtual NMI */
arch/x86/include/asm/nospec-branch.h +13 -0
@@ -218,5 +218,18 @@ static inline void vmexit_fill_RSB(void)#endif } +static inline void indirect_branch_prediction_barrier (void ) +{ + asm volatile(ALTERNATIVE("", + "movl %[msr], %%ecx\n\t" + "movl %[val], %%eax\n\t" + "movl $0, %%edx\n\t" + "wrmsr", + X86_FEATURE_IBPB) + : : [msr] "i" (MSR_IA32_PRED_CMD), + [val] "i" (PRED_CMD_IBPB) + : "eax", "ecx", "edx", "memory"); +} +#endif /* __ASSEMBLY__ */ #endif /* __NOSPEC_BRANCH_H__ */
arch/x86/kernel/cpu/bugs.c +9 -1
@@ -263,6 +263,13 @@ retpoline_auto:setup_force_cpu_cap (X86_FEATURE_RSB_CTXSW );pr_info ("Filling RSB on context switch\n" ); } + +/* Initialize Indirect Branch Prediction Barrier if supported */ +if (boot_cpu_has (X86_FEATURE_SPEC_CTRL ) || +boot_cpu_has (X86_FEATURE_AMD_PRED_CMD )) { +setup_force_cpu_cap (X86_FEATURE_IBPB ); +pr_info ("Enabling Indirect Branch Prediction Barrier\n" ); + } }#undef pr_fmt
@@ -292,7 +299,8 @@ ssize_t cpu_show_spectre_v2(struct devicif (!boot_cpu_has_bug (X86_BUG_SPECTRE_V2 ))return sprintf (buf,"Not affected\n" ); -return sprintf (buf,"%s%s\n" , spectre_v2_strings[spectre_v2_enabled], +return sprintf (buf,"%s%s%s\n" , spectre_v2_strings[spectre_v2_enabled], +boot_cpu_has (X86_FEATURE_IBPB ) ?", IPBP" :"" , spectre_v2_bad_module ? " - vulnerable module loaded" : ""); }#endif
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/x86pti_Do_not_enable_PTI_on_CPUs_which_are_not_vulnerable_to_Meltdown.patch queue-4.15/x86cpufeature_Blacklist_SPEC_CTRLPRED_CMD_on_early_Spectre_v2_microcodes.patch queue-4.15/x86cpufeatures_Add_Intel_feature_bits_for_Speculation_Control.patch queue-4.15/x86msr_Add_definitions_for_new_speculation_control_MSRs.patch queue-4.15/x86cpufeatures_Add_CPUID_7_EDX_CPUID_leaf.patch queue-4.15/x86cpufeatures_Add_AMD_feature_bits_for_Speculation_Control.patch queue-4.15/x86speculation_Add_basic_IBPB_(Indirect_Branch_Prediction_Barrier)_support.patch queue-4.15/x86speculation_Simplify_indirect_branch_prediction_barrier().patch queue-4.15/x86retpoline_Simplify_vmexit_fill_RSB().patch queue-4.15/x86cpufeatures_Clean_up_Spectre_v2_related_CPUID_flags.patch