@@ -1235,6 +1235,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
1235
1235
#define ITS_NATIVE_ONLY BIT(9)
1236
1236
/* CPU is affected by Transient Scheduler Attacks */
1237
1237
#define TSA BIT(10)
1238
+ /* CPU is affected by VMSCAPE */
1239
+ #define VMSCAPE BIT(11)
1238
1240
1239
1241
static const struct x86_cpu_id cpu_vuln_blacklist [] __initconst = {
1240
1242
VULNBL_INTEL_STEPS (INTEL_IVYBRIDGE , X86_STEP_MAX , SRBDS ),
@@ -1246,44 +1248,55 @@ static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
1246
1248
VULNBL_INTEL_STEPS (INTEL_BROADWELL_G , X86_STEP_MAX , SRBDS ),
1247
1249
VULNBL_INTEL_STEPS (INTEL_BROADWELL_X , X86_STEP_MAX , MMIO ),
1248
1250
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 ),
1258
1260
VULNBL_INTEL_STEPS (INTEL_ICELAKE_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED | GDS | ITS | ITS_NATIVE_ONLY ),
1259
1261
VULNBL_INTEL_STEPS (INTEL_ICELAKE_D , X86_STEP_MAX , MMIO | GDS | ITS | ITS_NATIVE_ONLY ),
1260
1262
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 ),
1264
1266
VULNBL_INTEL_STEPS (INTEL_TIGERLAKE_L , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
1265
1267
VULNBL_INTEL_STEPS (INTEL_TIGERLAKE , X86_STEP_MAX , GDS | ITS | ITS_NATIVE_ONLY ),
1266
1268
VULNBL_INTEL_STEPS (INTEL_LAKEFIELD , X86_STEP_MAX , MMIO | MMIO_SBDS | RETBLEED ),
1267
1269
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 ),
1274
1286
VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
1275
1287
VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_D , X86_STEP_MAX , MMIO | RFDS ),
1276
1288
VULNBL_INTEL_STEPS (INTEL_ATOM_TREMONT_L , X86_STEP_MAX , MMIO | MMIO_SBDS | RFDS ),
1277
1289
VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT , X86_STEP_MAX , RFDS ),
1278
1290
VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_D , X86_STEP_MAX , RFDS ),
1279
1291
VULNBL_INTEL_STEPS (INTEL_ATOM_GOLDMONT_PLUS , X86_STEP_MAX , RFDS ),
1292
+ VULNBL_INTEL_STEPS (INTEL_ATOM_CRESTMONT_X , X86_STEP_MAX , VMSCAPE ),
1280
1293
1281
1294
VULNBL_AMD (0x15 , RETBLEED ),
1282
1295
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 ),
1287
1300
{}
1288
1301
};
1289
1302
@@ -1542,6 +1555,14 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
1542
1555
}
1543
1556
}
1544
1557
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
+
1545
1566
if (cpu_matches (cpu_vuln_whitelist , NO_MELTDOWN ))
1546
1567
return ;
1547
1568
0 commit comments