@@ -1279,6 +1279,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
12791279#define ITS_NATIVE_ONLY BIT(9)
12801280/* CPU is affected by Transient Scheduler Attacks */
12811281#define TSA BIT(10)
1282+ /* CPU is affected by VMSCAPE */
1283+ #define VMSCAPE BIT(11)
12821284
12831285static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
12841286 VULNBL_INTEL_STEPPINGS (IVYBRIDGE , X86_STEPPING_ANY , SRBDS ),
@@ -1290,43 +1292,52 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
12901292 VULNBL_INTEL_STEPPINGS (BROADWELL_G , X86_STEPPING_ANY , SRBDS ),
12911293 VULNBL_INTEL_STEPPINGS (BROADWELL_X , X86_STEPPING_ANY , MMIO ),
12921294 VULNBL_INTEL_STEPPINGS (BROADWELL , X86_STEPPING_ANY , SRBDS ),
1293- VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS ),
1294- VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS ),
1295- VULNBL_INTEL_STEPPINGS (SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1296- VULNBL_INTEL_STEPPINGS (SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS ),
1297- VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS ),
1298- VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1299- VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS ),
1300- VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS ),
1301- VULNBL_INTEL_STEPPINGS (CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED ),
1295+ VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPINGS (0x0 , 0x5 ), MMIO | RETBLEED | GDS | VMSCAPE ),
1296+ VULNBL_INTEL_STEPPINGS (SKYLAKE_X , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | VMSCAPE ),
1297+ VULNBL_INTEL_STEPPINGS (SKYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1298+ VULNBL_INTEL_STEPPINGS (SKYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1299+ VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPINGS (0x0 , 0xb ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1300+ VULNBL_INTEL_STEPPINGS (KABYLAKE_L , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1301+ VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPINGS (0x0 , 0xc ), MMIO | RETBLEED | GDS | SRBDS | VMSCAPE ),
1302+ VULNBL_INTEL_STEPPINGS (KABYLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | SRBDS | ITS | VMSCAPE ),
1303+ VULNBL_INTEL_STEPPINGS (CANNONLAKE_L , X86_STEPPING_ANY , RETBLEED | VMSCAPE ),
13021304 VULNBL_INTEL_STEPPINGS (ICELAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
13031305 VULNBL_INTEL_STEPPINGS (ICELAKE_D , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
13041306 VULNBL_INTEL_STEPPINGS (ICELAKE_X , X86_STEPPING_ANY , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1305- VULNBL_INTEL_STEPPINGS (COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1306- VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS ),
1307- VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS ),
1307+ VULNBL_INTEL_STEPPINGS (COMETLAKE , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
1308+ VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPINGS (0x0 , 0x0 ), MMIO | RETBLEED | ITS | VMSCAPE ),
1309+ VULNBL_INTEL_STEPPINGS (COMETLAKE_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | VMSCAPE ),
13081310 VULNBL_INTEL_STEPPINGS (TIGERLAKE_L , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
13091311 VULNBL_INTEL_STEPPINGS (TIGERLAKE , X86_STEPPING_ANY , GDS | ITS | ITS_NATIVE_ONLY ),
13101312 VULNBL_INTEL_STEPPINGS (LAKEFIELD , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RETBLEED ),
13111313 VULNBL_INTEL_STEPPINGS (ROCKETLAKE , X86_STEPPING_ANY , MMIO | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1312- VULNBL_INTEL_STEPPINGS (ALDERLAKE , X86_STEPPING_ANY , RFDS ),
1313- VULNBL_INTEL_STEPPINGS (ALDERLAKE_L , X86_STEPPING_ANY , RFDS ),
1314- VULNBL_INTEL_STEPPINGS (RAPTORLAKE , X86_STEPPING_ANY , RFDS ),
1315- VULNBL_INTEL_STEPPINGS (RAPTORLAKE_P , X86_STEPPING_ANY , RFDS ),
1316- VULNBL_INTEL_STEPPINGS (RAPTORLAKE_S , X86_STEPPING_ANY , RFDS ),
1317- VULNBL_INTEL_STEPPINGS (ATOM_GRACEMONT , X86_STEPPING_ANY , RFDS ),
1314+ VULNBL_INTEL_STEPPINGS (ALDERLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1315+ VULNBL_INTEL_STEPPINGS (ALDERLAKE_L , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1316+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1317+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE_P , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1318+ VULNBL_INTEL_STEPPINGS (RAPTORLAKE_S , X86_STEPPING_ANY , RFDS | VMSCAPE ),
1319+ VULNBL_INTEL_STEPPINGS (METEORLAKE_L , X86_STEPPING_ANY , VMSCAPE ),
1320+ VULNBL_INTEL_STEPPINGS (ARROWLAKE_H , X86_STEPPING_ANY , VMSCAPE ),
1321+ VULNBL_INTEL_STEPPINGS (ARROWLAKE , X86_STEPPING_ANY , VMSCAPE ),
1322+ VULNBL_INTEL_STEPPINGS (ARROWLAKE_U , X86_STEPPING_ANY , VMSCAPE ),
1323+ VULNBL_INTEL_STEPPINGS (LUNARLAKE_M , X86_STEPPING_ANY , VMSCAPE ),
1324+ VULNBL_INTEL_STEPPINGS (SAPPHIRERAPIDS_X ,X86_STEPPING_ANY , VMSCAPE ),
1325+ VULNBL_INTEL_STEPPINGS (GRANITERAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1326+ VULNBL_INTEL_STEPPINGS (EMERALDRAPIDS_X , X86_STEPPING_ANY , VMSCAPE ),
1327+ VULNBL_INTEL_STEPPINGS (ATOM_GRACEMONT , X86_STEPPING_ANY , RFDS | VMSCAPE ),
13181328 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
13191329 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT_D , X86_STEPPING_ANY , MMIO | RFDS ),
13201330 VULNBL_INTEL_STEPPINGS (ATOM_TREMONT_L , X86_STEPPING_ANY , MMIO | MMIO_SBDS | RFDS ),
13211331 VULNBL_INTEL_STEPPINGS (ATOM_GOLDMONT , X86_STEPPING_ANY , RFDS ),
13221332 VULNBL_INTEL_STEPPINGS (ATOM_GOLDMONT_D , X86_STEPPING_ANY , RFDS ),
13231333 VULNBL_INTEL_STEPPINGS (ATOM_GOLDMONT_PLUS , X86_STEPPING_ANY , RFDS ),
1334+ VULNBL_INTEL_STEPPINGS (ATOM_CRESTMONT_X , X86_STEPPING_ANY , VMSCAPE ),
13241335
13251336 VULNBL_AMD (0x15 , RETBLEED ),
13261337 VULNBL_AMD (0x16 , RETBLEED ),
1327- VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO ),
1328- VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO ),
1329- VULNBL_AMD (0x19 , SRSO | TSA ),
1338+ VULNBL_AMD (0x17 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1339+ VULNBL_HYGON (0x18 , RETBLEED | SMT_RSB | SRSO | VMSCAPE ),
1340+ VULNBL_AMD (0x19 , SRSO | TSA | VMSCAPE ),
13301341 {}
13311342};
13321343
@@ -1541,6 +1552,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
15411552 }
15421553 }
15431554
1555+ /*
1556+ * Set the bug only on bare-metal. A nested hypervisor should already be
1557+ * deploying IBPB to isolate itself from nested guests.
1558+ */
1559+ if (cpu_matches (cpu_vuln_blacklist , VMSCAPE ) &&
1560+ !boot_cpu_has (X86_FEATURE_HYPERVISOR ))
1561+ setup_force_cpu_bug (X86_BUG_VMSCAPE );
1562+
15441563 if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
15451564 return ;
15461565
0 commit comments