@@ -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_STEPS (INTEL_IVYBRIDGE , X86_STEP_MAX , SRBDS ),
@@ -1246,44 +1248,55 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12461248 VULNBL_INTEL_STEPS (INTEL_BROADWELL_G , X86_STEP_MAX , SRBDS ),
12471249 VULNBL_INTEL_STEPS (INTEL_BROADWELL_X , X86_STEP_MAX , MMIO ),
12481250 VULNBL_INTEL_STEPS (INTEL_BROADWELL , X86_STEP_MAX , SRBDS ),
1249- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS ),
1250- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS ),
1251- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1252- VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1253- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS ),
1254- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1255- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS ),
1256- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1257- VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED ),
1251+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS | VMSCAPE ),
1252+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1253+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1254+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1255+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1256+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1257+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1258+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1259+ VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED | VMSCAPE ),
12581260 VULNBL_INTEL_STEPS (INTEL_ICELAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
12591261 VULNBL_INTEL_STEPS (INTEL_ICELAKE_D , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
12601262 VULNBL_INTEL_STEPS (INTEL_ICELAKE_X , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1261- VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1262- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS ),
1263- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1263+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1264+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS | VMSCAPE ),
1265+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
12641266 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE_L , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12651267 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12661268 VULNBL_INTEL_STEPS (INTEL_LAKEFIELD , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED ),
12671269 VULNBL_INTEL_STEPS (INTEL_ROCKETLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1268- VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS ),
1269- VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS ),
1270- VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS ),
1271- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS ),
1272- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS ),
1273- VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS ),
1270+ VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS | VMSCAPE ),
1271+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE , X86_STEP_MAX , VMSCAPE ),
1272+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS | VMSCAPE ),
1273+ VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS | VMSCAPE ),
1274+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE , X86_STEP_MAX , VMSCAPE ),
1275+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS | VMSCAPE ),
1276+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS | VMSCAPE ),
1277+ VULNBL_INTEL_STEPS (INTEL_METEORLAKE_L , X86_STEP_MAX , VMSCAPE ),
1278+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_H , X86_STEP_MAX , VMSCAPE ),
1279+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE , X86_STEP_MAX , VMSCAPE ),
1280+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_U , X86_STEP_MAX , VMSCAPE ),
1281+ VULNBL_INTEL_STEPS (INTEL_LUNARLAKE_M , X86_STEP_MAX , VMSCAPE ),
1282+ VULNBL_INTEL_STEPS (INTEL_SAPPHIRERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1283+ VULNBL_INTEL_STEPS (INTEL_GRANITERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1284+ VULNBL_INTEL_STEPS (INTEL_EMERALDRAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1285+ VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS | VMSCAPE ),
12741286 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12751287 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_D , X86_STEP_MAX , MMIO | RFDS ),
12761288 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12771289 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT , X86_STEP_MAX , RFDS ),
12781290 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_D , X86_STEP_MAX , RFDS ),
12791291 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_PLUS , X86_STEP_MAX , RFDS ),
1292+ VULNBL_INTEL_STEPS (INTEL_ATOM_CRESTMONT_X , X86_STEP_MAX , VMSCAPE ),
12801293
12811294 VULNBL_AMD (0x15 , RETBLEED ),
12821295 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 ),
1286- VULNBL_AMD (0x1a , SRSO ),
1296+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1297+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1298+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
1299+ VULNBL_AMD (0x1a , SRSO | VMSCAPE ),
12871300 {}
12881301};
12891302
@@ -1542,6 +1555,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
15421555 }
15431556 }
15441557
1558+ /*
1559+ * Set the bug only on bare-metal. A nested hypervisor should already be
1560+ * deploying IBPB to isolate itself from nested guests.
1561+ */
1562+ if (cpu_matches (cpu_vuln_blacklist , VMSCAPE ) &&
1563+ !boot_cpu_has (X86_FEATURE_HYPERVISOR ))
1564+ setup_force_cpu_bug (X86_BUG_VMSCAPE );
1565+
15451566 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
15461567 return ;
15471568
0 commit comments