@@ -1237,6 +1237,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
12371237#define ITS_NATIVE_ONLY BIT(9)
12381238/* CPU is affected by Transient Scheduler Attacks */
12391239#define TSA BIT(10)
1240+ /* CPU is affected by VMSCAPE */
1241+ #define VMSCAPE BIT(11)
12401242
12411243static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
12421244 VULNBL_INTEL_STEPS (INTEL_IVYBRIDGE , X86_STEP_MAX , SRBDS ),
@@ -1248,44 +1250,55 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12481250 VULNBL_INTEL_STEPS (INTEL_BROADWELL_G , X86_STEP_MAX , SRBDS ),
12491251 VULNBL_INTEL_STEPS (INTEL_BROADWELL_X , X86_STEP_MAX , MMIO ),
12501252 VULNBL_INTEL_STEPS (INTEL_BROADWELL , X86_STEP_MAX , SRBDS ),
1251- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS ),
1252- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS ),
1253- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1254- VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1255- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS ),
1256- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1257- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS ),
1258- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1259- VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED ),
1253+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS | VMSCAPE ),
1254+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1255+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1256+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1257+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1258+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1259+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1260+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1261+ VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED | VMSCAPE ),
12601262 VULNBL_INTEL_STEPS (INTEL_ICELAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
12611263 VULNBL_INTEL_STEPS (INTEL_ICELAKE_D , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
12621264 VULNBL_INTEL_STEPS (INTEL_ICELAKE_X , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1263- VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1264- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS ),
1265- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1265+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1266+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS | VMSCAPE ),
1267+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
12661268 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE_L , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12671269 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12681270 VULNBL_INTEL_STEPS (INTEL_LAKEFIELD , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED ),
12691271 VULNBL_INTEL_STEPS (INTEL_ROCKETLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1270- VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS ),
1271- VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS ),
1272- VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS ),
1273- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS ),
1274- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS ),
1275- VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS ),
1272+ VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS | VMSCAPE ),
1273+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE , X86_STEP_MAX , VMSCAPE ),
1274+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS | VMSCAPE ),
1275+ VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS | VMSCAPE ),
1276+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE , X86_STEP_MAX , VMSCAPE ),
1277+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS | VMSCAPE ),
1278+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS | VMSCAPE ),
1279+ VULNBL_INTEL_STEPS (INTEL_METEORLAKE_L , X86_STEP_MAX , VMSCAPE ),
1280+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_H , X86_STEP_MAX , VMSCAPE ),
1281+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE , X86_STEP_MAX , VMSCAPE ),
1282+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_U , X86_STEP_MAX , VMSCAPE ),
1283+ VULNBL_INTEL_STEPS (INTEL_LUNARLAKE_M , X86_STEP_MAX , VMSCAPE ),
1284+ VULNBL_INTEL_STEPS (INTEL_SAPPHIRERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1285+ VULNBL_INTEL_STEPS (INTEL_GRANITERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1286+ VULNBL_INTEL_STEPS (INTEL_EMERALDRAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1287+ VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS | VMSCAPE ),
12761288 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12771289 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_D , X86_STEP_MAX , MMIO | RFDS ),
12781290 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12791291 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT , X86_STEP_MAX , RFDS ),
12801292 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_D , X86_STEP_MAX , RFDS ),
12811293 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_PLUS , X86_STEP_MAX , RFDS ),
1294+ VULNBL_INTEL_STEPS (INTEL_ATOM_CRESTMONT_X , X86_STEP_MAX , VMSCAPE ),
12821295
12831296 VULNBL_AMD (0x15 , RETBLEED ),
12841297 VULNBL_AMD (0x16 , RETBLEED ),
1285- VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO ),
1286- VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO ),
1287- VULNBL_AMD (0x19 , SRSO | TSA ),
1288- VULNBL_AMD (0x1a , SRSO ),
1298+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1299+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1300+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
1301+ VULNBL_AMD (0x1a , SRSO | VMSCAPE ),
12891302 {}
12901303};
12911304
@@ -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