@@ -1236,6 +1236,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
12361236#define ITS_NATIVE_ONLY BIT(9)
12371237/* CPU is affected by Transient Scheduler Attacks */
12381238#define TSA BIT(10)
1239+ /* CPU is affected by VMSCAPE */
1240+ #define VMSCAPE BIT(11)
12391241
12401242static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
12411243 VULNBL_INTEL_STEPS (INTEL_IVYBRIDGE , X86_STEP_MAX , SRBDS ),
@@ -1247,44 +1249,55 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12471249 VULNBL_INTEL_STEPS (INTEL_BROADWELL_G , X86_STEP_MAX , SRBDS ),
12481250 VULNBL_INTEL_STEPS (INTEL_BROADWELL_X , X86_STEP_MAX , MMIO ),
12491251 VULNBL_INTEL_STEPS (INTEL_BROADWELL , X86_STEP_MAX , SRBDS ),
1250- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS ),
1251- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS ),
1252- VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1253- VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS ),
1254- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS ),
1255- VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1256- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS ),
1257- VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1258- VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED ),
1252+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , 0x5 , MMIO | RETBLEED | GDS | VMSCAPE ),
1253+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_X , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1254+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1255+ VULNBL_INTEL_STEPS (INTEL_SKYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1256+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , 0xb , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1257+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE_L , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1258+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , 0xc , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1259+ VULNBL_INTEL_STEPS (INTEL_KABYLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1260+ VULNBL_INTEL_STEPS (INTEL_CANNONLAKE_L , X86_STEP_MAX , RETBLEED | VMSCAPE ),
12591261 VULNBL_INTEL_STEPS (INTEL_ICELAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
12601262 VULNBL_INTEL_STEPS (INTEL_ICELAKE_D , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
12611263 VULNBL_INTEL_STEPS (INTEL_ICELAKE_X , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1262- VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1263- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS ),
1264- VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1264+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1265+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , 0x0 , MMIO | RETBLEED | ITS | VMSCAPE ),
1266+ VULNBL_INTEL_STEPS (INTEL_COMETLAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
12651267 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE_L , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12661268 VULNBL_INTEL_STEPS (INTEL_TIGERLAKE , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
12671269 VULNBL_INTEL_STEPS (INTEL_LAKEFIELD , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED ),
12681270 VULNBL_INTEL_STEPS (INTEL_ROCKETLAKE , X86_STEP_MAX , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1269- VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS ),
1270- VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS ),
1271- VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS ),
1272- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS ),
1273- VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS ),
1274- VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS ),
1271+ VULNBL_INTEL_TYPE (INTEL_ALDERLAKE , ATOM , RFDS | VMSCAPE ),
1272+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE , X86_STEP_MAX , VMSCAPE ),
1273+ VULNBL_INTEL_STEPS (INTEL_ALDERLAKE_L , X86_STEP_MAX , RFDS | VMSCAPE ),
1274+ VULNBL_INTEL_TYPE (INTEL_RAPTORLAKE , ATOM , RFDS | VMSCAPE ),
1275+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE , X86_STEP_MAX , VMSCAPE ),
1276+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_P , X86_STEP_MAX , RFDS | VMSCAPE ),
1277+ VULNBL_INTEL_STEPS (INTEL_RAPTORLAKE_S , X86_STEP_MAX , RFDS | VMSCAPE ),
1278+ VULNBL_INTEL_STEPS (INTEL_METEORLAKE_L , X86_STEP_MAX , VMSCAPE ),
1279+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_H , X86_STEP_MAX , VMSCAPE ),
1280+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE , X86_STEP_MAX , VMSCAPE ),
1281+ VULNBL_INTEL_STEPS (INTEL_ARROWLAKE_U , X86_STEP_MAX , VMSCAPE ),
1282+ VULNBL_INTEL_STEPS (INTEL_LUNARLAKE_M , X86_STEP_MAX , VMSCAPE ),
1283+ VULNBL_INTEL_STEPS (INTEL_SAPPHIRERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1284+ VULNBL_INTEL_STEPS (INTEL_GRANITERAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1285+ VULNBL_INTEL_STEPS (INTEL_EMERALDRAPIDS_X , X86_STEP_MAX , VMSCAPE ),
1286+ VULNBL_INTEL_STEPS (INTEL_ATOM_GRACEMONT , X86_STEP_MAX , RFDS | VMSCAPE ),
12751287 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12761288 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_D , X86_STEP_MAX , MMIO | RFDS ),
12771289 VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
12781290 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT , X86_STEP_MAX , RFDS ),
12791291 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_D , X86_STEP_MAX , RFDS ),
12801292 VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_PLUS , X86_STEP_MAX , RFDS ),
1293+ VULNBL_INTEL_STEPS (INTEL_ATOM_CRESTMONT_X , X86_STEP_MAX , VMSCAPE ),
12811294
12821295 VULNBL_AMD (0x15 , RETBLEED ),
12831296 VULNBL_AMD (0x16 , RETBLEED ),
1284- VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO ),
1285- VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO ),
1286- VULNBL_AMD (0x19 , SRSO | TSA ),
1287- VULNBL_AMD (0x1a , SRSO ),
1297+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1298+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1299+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
1300+ VULNBL_AMD (0x1a , SRSO | VMSCAPE ),
12881301 {}
12891302};
12901303
@@ -1543,6 +1556,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
15431556 }
15441557 }
15451558
1559+ /*
1560+ * Set the bug only on bare-metal. A nested hypervisor should already be
1561+ * deploying IBPB to isolate itself from nested guests.
1562+ */
1563+ if (cpu_matches (cpu_vuln_blacklist , VMSCAPE ) &&
1564+ !boot_cpu_has (X86_FEATURE_HYPERVISOR ))
1565+ setup_force_cpu_bug (X86_BUG_VMSCAPE );
1566+
15461567 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
15471568 return ;
15481569
0 commit comments