@@ -1258,6 +1258,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
12581258#define ITS_NATIVE_ONLY BIT(9)
12591259/* CPU is affected by Transient Scheduler Attacks */
12601260#define TSA BIT(10)
1261+ /* CPU is affected by VMSCAPE */
1262+ #define VMSCAPE BIT(11)
12611263
12621264static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
12631265 VULNBL_INTEL_STEPPINGS (IVYBRIDGE , X86_STEPPING_ANY , SRBDS ),
@@ -1269,31 +1271,38 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12691271 VULNBL_INTEL_STEPPINGS (BROADWELL_G , X86_STEPPING_ANY , SRBDS ),
12701272 VULNBL_INTEL_STEPPINGS (BROADWELL_X , X86_STEPPING_ANY , MMIO ),
12711273 VULNBL_INTEL_STEPPINGS (BROADWELL , X86_STEPPING_ANY , SRBDS ),
1272- VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS ),
1273- VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS ),
1274- VULNBL_INTEL_STEPPINGS (SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1275- VULNBL_INTEL_STEPPINGS (SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1276- VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS ),
1277- VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1278- VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS ),
1279- VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1280- VULNBL_INTEL_STEPPINGS (CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED ),
1274+ VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS | VMSCAPE ),
1275+ VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1276+ VULNBL_INTEL_STEPPINGS (SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1277+ VULNBL_INTEL_STEPPINGS (SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1278+ VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1279+ VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1280+ VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1281+ VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1282+ VULNBL_INTEL_STEPPINGS (CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED | VMSCAPE ),
12811283 VULNBL_INTEL_STEPPINGS (ICELAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
12821284 VULNBL_INTEL_STEPPINGS (ICELAKE_D , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
12831285 VULNBL_INTEL_STEPPINGS (ICELAKE_X , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1284- VULNBL_INTEL_STEPPINGS (COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1285- VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS ),
1286- VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1286+ VULNBL_INTEL_STEPPINGS (COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1287+ VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS | VMSCAPE ),
1288+ VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
12871289 VULNBL_INTEL_STEPPINGS (TIGERLAKE_L , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
12881290 VULNBL_INTEL_STEPPINGS (TIGERLAKE , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
12891291 VULNBL_INTEL_STEPPINGS (LAKEFIELD , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED ),
12901292 VULNBL_INTEL_STEPPINGS (ROCKETLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1291- VULNBL_INTEL_STEPPINGS (ALDERLAKE , X86_STEPPING_ANY , RFDS ),
1292- VULNBL_INTEL_STEPPINGS (ALDERLAKE_L , X86_STEPPING_ANY , RFDS ),
1293- VULNBL_INTEL_STEPPINGS (RAPTORLAKE , X86_STEPPING_ANY , RFDS ),
1294- VULNBL_INTEL_STEPPINGS (RAPTORLAKE_P , X86_STEPPING_ANY , RFDS ),
1295- VULNBL_INTEL_STEPPINGS (RAPTORLAKE_S , X86_STEPPING_ANY , RFDS ),
1296- VULNBL_INTEL_STEPPINGS (ALDERLAKE_N , X86_STEPPING_ANY , RFDS ),
1293+ VULNBL_INTEL_STEPPINGS (ALDERLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1294+ VULNBL_INTEL_STEPPINGS (ALDERLAKE_L , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1295+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1296+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE_P , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1297+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE_S , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1298+ VULNBL_INTEL_STEPPINGS (METEORLAKE_L , X86_STEPPING_ANY , VMSCAPE ),
1299+ VULNBL_INTEL_STEPPINGS (ARROWLAKE_H , X86_STEPPING_ANY , VMSCAPE ),
1300+ VULNBL_INTEL_STEPPINGS (ARROWLAKE , X86_STEPPING_ANY , VMSCAPE ),
1301+ VULNBL_INTEL_STEPPINGS (LUNARLAKE_M , X86_STEPPING_ANY , VMSCAPE ),
1302+ VULNBL_INTEL_STEPPINGS (SAPPHIRERAPIDS_X ,X86_STEPPING_ANY , VMSCAPE ),
1303+ VULNBL_INTEL_STEPPINGS (GRANITERAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1304+ VULNBL_INTEL_STEPPINGS (EMERALDRAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1305+ VULNBL_INTEL_STEPPINGS (ALDERLAKE_N , X86_STEPPING_ANY , RFDS | VMSCAPE ),
12971306 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
12981307 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT_D , X86_STEPPING_ANY , MMIO | RFDS ),
12991308 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
@@ -1303,9 +1312,9 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
13031312
13041313 VULNBL_AMD (0x15 , RETBLEED ),
13051314 VULNBL_AMD (0x16 , RETBLEED ),
1306- VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO ),
1307- VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO ),
1308- VULNBL_AMD (0x19 , SRSO | TSA ),
1315+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1316+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1317+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
13091318 {}
13101319};
13111320
@@ -1520,6 +1529,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
15201529 }
15211530 }
15221531
1532+ /*
1533+ * Set the bug only on bare-metal. A nested hypervisor should already be
1534+ * deploying IBPB to isolate itself from nested guests.
1535+ */
1536+ if (cpu_matches (cpu_vuln_blacklist , VMSCAPE ) &&
1537+ !boot_cpu_has (X86_FEATURE_HYPERVISOR ))
1538+ setup_force_cpu_bug (X86_BUG_VMSCAPE );
1539+
15231540 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
15241541 return ;
15251542
0 commit comments