@@ -1235,6 +1235,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
12351235#define ITS_NATIVE_ONLY BIT(9)
12361236/* CPU is affected by Transient Scheduler Attacks */
12371237#define TSA BIT(10)
1238+ /* CPU is affected by VMSCAPE */
1239+ #define VMSCAPE BIT(11)
12381240
12391241static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
12401242 VULNBL_INTEL_STEPPINGS (INTEL_IVYBRIDGE , X86_STEPPING_ANY , SRBDS ),
@@ -1246,43 +1248,54 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12461248 VULNBL_INTEL_STEPPINGS (INTEL_BROADWELL_G , X86_STEPPING_ANY , SRBDS ),
12471249 VULNBL_INTEL_STEPPINGS (INTEL_BROADWELL_X , X86_STEPPING_ANY , MMIO ),
12481250 VULNBL_INTEL_STEPPINGS (INTEL_BROADWELL , X86_STEPPING_ANY , SRBDS ),
1249- VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS ),
1250- VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS ),
1251- VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1252- VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1253- VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS ),
1254- VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1255- VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS ),
1256- VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1257- VULNBL_INTEL_STEPPINGS (INTEL_CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED ),
1251+ VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS | VMSCAPE ),
1252+ VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1253+ VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1254+ VULNBL_INTEL_STEPPINGS (INTEL_SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1255+ VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1256+ VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1257+ VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1258+ VULNBL_INTEL_STEPPINGS (INTEL_KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1259+ VULNBL_INTEL_STEPPINGS (INTEL_CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED | VMSCAPE ),
12581260 VULNBL_INTEL_STEPPINGS (INTEL_ICELAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
12591261 VULNBL_INTEL_STEPPINGS (INTEL_ICELAKE_D , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
12601262 VULNBL_INTEL_STEPPINGS (INTEL_ICELAKE_X , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1261- VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1262- VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS ),
1263- VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1263+ VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1264+ VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS | VMSCAPE ),
1265+ VULNBL_INTEL_STEPPINGS (INTEL_COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
12641266 VULNBL_INTEL_STEPPINGS (INTEL_TIGERLAKE_L , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
12651267 VULNBL_INTEL_STEPPINGS (INTEL_TIGERLAKE , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
12661268 VULNBL_INTEL_STEPPINGS (INTEL_LAKEFIELD , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED ),
12671269 VULNBL_INTEL_STEPPINGS (INTEL_ROCKETLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1268- VULNBL_INTEL_STEPPINGS (INTEL_ALDERLAKE , X86_STEPPING_ANY , RFDS ),
1269- VULNBL_INTEL_STEPPINGS (INTEL_ALDERLAKE_L , X86_STEPPING_ANY , RFDS ),
1270- VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE , X86_STEPPING_ANY , RFDS ),
1271- VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE_P , X86_STEPPING_ANY , RFDS ),
1272- VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE_S , X86_STEPPING_ANY , RFDS ),
1273- VULNBL_INTEL_STEPPINGS (INTEL_ATOM_GRACEMONT , X86_STEPPING_ANY , RFDS ),
1270+ VULNBL_INTEL_STEPPINGS (INTEL_ALDERLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1271+ VULNBL_INTEL_STEPPINGS (INTEL_ALDERLAKE_L , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1272+ VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1273+ VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE_P , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1274+ VULNBL_INTEL_STEPPINGS (INTEL_RAPTORLAKE_S , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1275+ VULNBL_INTEL_STEPPINGS (INTEL_METEORLAKE_L , X86_STEPPING_ANY , VMSCAPE ),
1276+ VULNBL_INTEL_STEPPINGS (INTEL_ARROWLAKE_H , X86_STEPPING_ANY , VMSCAPE ),
1277+ VULNBL_INTEL_STEPPINGS (INTEL_ARROWLAKE , X86_STEPPING_ANY , VMSCAPE ),
1278+ VULNBL_INTEL_STEPPINGS (INTEL_ARROWLAKE_U , X86_STEPPING_ANY , VMSCAPE ),
1279+ VULNBL_INTEL_STEPPINGS (INTEL_LUNARLAKE_M , X86_STEPPING_ANY , VMSCAPE ),
1280+ VULNBL_INTEL_STEPPINGS (INTEL_SAPPHIRERAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1281+ VULNBL_INTEL_STEPPINGS (INTEL_GRANITERAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1282+ VULNBL_INTEL_STEPPINGS (INTEL_EMERALDRAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1283+ VULNBL_INTEL_STEPPINGS (INTEL_ATOM_GRACEMONT , X86_STEPPING_ANY , RFDS | VMSCAPE ),
12741284 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_TREMONT , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
12751285 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_TREMONT_D , X86_STEPPING_ANY , MMIO | RFDS ),
12761286 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_TREMONT_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
12771287 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_GOLDMONT , X86_STEPPING_ANY , RFDS ),
12781288 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_GOLDMONT_D , X86_STEPPING_ANY , RFDS ),
12791289 VULNBL_INTEL_STEPPINGS (INTEL_ATOM_GOLDMONT_PLUS , X86_STEPPING_ANY , RFDS ),
1290+ VULNBL_INTEL_STEPPINGS (INTEL_ATOM_CRESTMONT_X , X86_STEPPING_ANY , VMSCAPE ),
12801291
12811292 VULNBL_AMD (0x15 , RETBLEED ),
12821293 VULNBL_AMD (0x16 , RETBLEED ),
1283- VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO ),
1284- VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO ),
1285- VULNBL_AMD (0x19 , SRSO | TSA ),
1294+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1295+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1296+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
1297+ VULNBL_AMD (0x1a , SRSO | VMSCAPE ),
1298+
12861299 {}
12871300};
12881301
@@ -1502,6 +1515,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
15021515 }
15031516 }
15041517
1518+ /*
1519+ * Set the bug only on bare-metal. A nested hypervisor should already be
1520+ * deploying IBPB to isolate itself from nested guests.
1521+ */
1522+ if (cpu_matches (cpu_vuln_blacklist , VMSCAPE ) &&
1523+ !boot_cpu_has (X86_FEATURE_HYPERVISOR ))
1524+ setup_force_cpu_bug (X86_BUG_VMSCAPE );
1525+
15051526 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
15061527 return ;
15071528
0 commit comments