@@ -1120,6 +1120,7 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
11201120#define NO_SPECTRE_V2 BIT(8)
11211121#define NO_MMIO BIT(9)
11221122#define NO_EIBRS_PBRSB BIT(10)
1123+ #define NO_BHI BIT(11)
11231124
11241125#define VULNWL (vendor , family , model , whitelist ) \
11251126 X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, whitelist)
@@ -1182,18 +1183,18 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
11821183 VULNWL_INTEL (ATOM_TREMONT_D , NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB ),
11831184
11841185 /* AMD Family 0xf - 0x12 */
1185- VULNWL_AMD (0x0f , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO ),
1186- VULNWL_AMD (0x10 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO ),
1187- VULNWL_AMD (0x11 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO ),
1188- VULNWL_AMD (0x12 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO ),
1186+ VULNWL_AMD (0x0f , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_BHI ),
1187+ VULNWL_AMD (0x10 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_BHI ),
1188+ VULNWL_AMD (0x11 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_BHI ),
1189+ VULNWL_AMD (0x12 , NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_BHI ),
11891190
11901191 /* FAMILY_ANY must be last, otherwise 0x0f - 0x12 matches won't work */
1191- VULNWL_AMD (X86_FAMILY_ANY , NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB ),
1192- VULNWL_HYGON (X86_FAMILY_ANY , NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB ),
1192+ VULNWL_AMD (X86_FAMILY_ANY , NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB | NO_BHI ),
1193+ VULNWL_HYGON (X86_FAMILY_ANY , NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB | NO_BHI ),
11931194
11941195 /* Zhaoxin Family 7 */
1195- VULNWL (CENTAUR , 7 , X86_MODEL_ANY , NO_SPECTRE_V2 | NO_SWAPGS | NO_MMIO ),
1196- VULNWL (ZHAOXIN , 7 , X86_MODEL_ANY , NO_SPECTRE_V2 | NO_SWAPGS | NO_MMIO ),
1196+ VULNWL (CENTAUR , 7 , X86_MODEL_ANY , NO_SPECTRE_V2 | NO_SWAPGS | NO_MMIO | NO_BHI ),
1197+ VULNWL (ZHAOXIN , 7 , X86_MODEL_ANY , NO_SPECTRE_V2 | NO_SWAPGS | NO_MMIO | NO_BHI ),
11971198 {}
11981199};
11991200
@@ -1435,6 +1436,13 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
14351436 if (vulnerable_to_rfds (ia32_cap ))
14361437 setup_force_cpu_bug (X86_BUG_RFDS );
14371438
1439+ /* When virtualized, eIBRS could be hidden, assume vulnerable */
1440+ if (!(ia32_cap & ARCH_CAP_BHI_NO ) &&
1441+ !cpu_matches (cpu_vuln_whitelist , NO_BHI ) &&
1442+ (boot_cpu_has (X86_FEATURE_IBRS_ENHANCED ) ||
1443+ boot_cpu_has (X86_FEATURE_HYPERVISOR )))
1444+ setup_force_cpu_bug (X86_BUG_BHI );
1445+
14381446 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
14391447 return ;
14401448
0 commit comments