Processor vulnerability
CVE-2017-5715
Code in one context trains the indirect branch predictor so that an indirect branch elsewhere, such as in the kernel, speculatively runs code it chose.
- Name
- Branch Target Injection
- Also known as
- Spectre variant 2, Variant 2
- Vulnerability
- Spectre variant 2
- Kind
- Transient execution
- CVE published
- 2018-01-04 CVE record
- Advisories
- INTEL-SA-00088
- Linux reports it in
spectre_v2
The branch target buffer that predicts indirect branches is indexed by only part of a branch’s address, so a branch in the attacker’s code can share an entry with a branch in the victim’s. The attacker jumps to a chosen target from such an alias, then enters the victim, whose indirect branch speculatively runs that target: a gadget that loads secret data and leaves a trace of it in the cache. On processors with simultaneous multithreading, the sibling thread can train the shared predictor too.
Linux reports variant 2 on every processor that speculates, except where it lists the processor as not affected: the Zhaoxin and Centaur family 7 parts, and the Bonnell and Saltwell Atoms.
Affected processors
59 of the 63 microarchitectures listed are affected in all or some of their models.
| Microarchitecture | Status | Detail | Source |
|---|---|---|---|
| NetBurst (Prescott, Nocona) | Affected | Linux 7.3 sets the bug on INTEL_P4_CEDARMILL, INTEL_P4_PRESCOTT, INTEL_P4_PRESCOTT_2M: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Core (Merom, Conroe) | Affected | Linux 7.3 sets the bug on INTEL_CORE2_MEROM, INTEL_CORE2_MEROM_L: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Penryn | Affected | Linux 7.3 sets the bug on INTEL_CORE2_DUNNINGTON, INTEL_CORE2_PENRYN: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Nehalem | Affected | Linux 7.3 sets the bug on INTEL_NEHALEM, INTEL_NEHALEM_EP, INTEL_NEHALEM_EX, INTEL_NEHALEM_G: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Westmere | Affected | Linux 7.3 sets the bug on INTEL_WESTMERE, INTEL_WESTMERE_EP, INTEL_WESTMERE_EX: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Sandy Bridge | Affected | Linux 7.3 sets the bug on INTEL_SANDYBRIDGE, INTEL_SANDYBRIDGE_X: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Ivy Bridge | Affected | Linux 7.3 sets the bug on INTEL_IVYBRIDGE, INTEL_IVYBRIDGE_X: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Haswell | Affected | 06_3FH stepping 2 (Haswell Server EP/EP4S): MCU+Software 06_3FH stepping 4 (Haswell Server EX): MCU+Software | Intel’s list |
| Broadwell | Affected | 06_4FH stepping 1 (1. Broadwell Server E/EP/EP4S - 2. Broadwell Server EX): MCU+Software 06_56H stepping 3 (Broadwell DE V2 - V3): MCU+Software 06_56H stepping 4 (Broadwell DE Y0): MCU+Software 06_56H stepping 5 (Hewitt Lake (Broadwell DE)): MCU+Software | Intel’s list |
| Skylake | Affected | 06_5EH stepping 3 (1. Skylake Xeon E3 - 2. Skylake H - 3. Skylake S): MCU+Software | Intel’s list |
| Kaby Lake | Affected | 06_8EH stepping 9 (1. Amber Lake-Y - 2. Kaby Lake U - 3. Kaby Lake U23e - 4. Kaby Lake Y): MCU+Software 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Hardware+Software 06_9EH stepping 9 (1. Kaby Lake S - 2. Kaby Lake Xeon E3): MCU+Software | Intel’s list |
| Coffee Lake | Affected | 06_8EH stepping A (1. Coffee Lake U43e - 2. Whiskey Lake): MCU+Software 06_8EH stepping B (Whiskey Lake U): MCU+Software 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Hardware+Software 06_9EH stepping A (Coffee Lake H): MCU+Software 06_9EH stepping C (Coffee Lake S): MCU+Software 06_9EH stepping D (1. Coffee Lake H - 2. Coffee Lake Xeon E - 3. Coffee Lake S): Hardware+Software | Intel’s list |
| Cannon Lake | Affected | Linux 7.3 sets the bug on INTEL_CANNONLAKE_L: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Comet Lake | Affected | 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Hardware+Software 06_A5H stepping 2 (Comet Lake H): Hardware+Software 06_A5H stepping 3 (Comet Lake-S): Hardware+Software 06_A5H stepping 5 (Comet Lake-S): Hardware+Software 06_A6H stepping 0 (Comet Lake U62): Hardware+Software 06_A6H stepping 1 (Comet Lake U62): Hardware+Software | Intel’s list |
| Ice Lake (client) | Affected | 06_7EH stepping 5 (Ice Lake U - Ice Lake Y): Hardware+Software | Intel’s list |
| Tiger Lake | Affected | 06_8CH stepping 1 (Tiger Lake U): Hardware+Software 06_8CH stepping 1 (Tiger Lake U): Hardware+Software 06_8CH stepping 2 (1. Tiger Lake U Refresh - 2. Tiger Lake H35): Hardware+Software 06_8DH stepping 1 (Tiger Lake H): Hardware+Software 06_8DH stepping 1 (Tiger Lake H): Hardware+Software | Intel’s list |
| Alder Lake | Affected | 06_97H stepping 2 (Alder Lake S (Golden Cove - Gracemont)): Hardware+Software 06_97H stepping 5 (Alder Lake S (Golden Cove - Gracemont)): Hardware+Software 06_97H stepping 5 (Catlow (Golden Cove)): Hardware+Software 06_9AH stepping 3 (1. Alder Lake H (Golden Cove - Gracemont) - 2. Alder Lake P (Golden Cove - Gracemont)): Hardware+Software 06_9AH stepping 4 (Alder Lake U (Golden Cove - Gracemont)): Hardware+Software | Intel’s list |
| Rocket Lake | Affected | 06_A7H stepping 1 (Rocket Lake): Hardware+Software | Intel’s list |
| Raptor Lake | Affected | 06_B7H stepping 1 (1. Raptor Lake S - 2. Raptor Lake HX (Raptor Cove/Gracemont)): Hardware+Software 06_B7H stepping 1 (Catlow (Raptor Cove)): Hardware+Software 06_BAH stepping 2 - 3 - 8 (1. Raptor Lake P - 2. Raptor Lake H + refresh - 3. Raptor Lake U + refresh (Raptor Cove/Gracemont)): Hardware+Software 06_BFH stepping 2 - 5 (Raptor Lake S (Raptor Cove/Gracemont)): Hardware+Software | Intel’s list |
| Meteor Lake | Affected | 06_AAH stepping 4 (Meteor Lake U/H/PS (Redwood Cove - Crestmont)): Hardware+Software | Intel’s list |
| Arrow Lake | Affected | 06_B5H stepping 0 (Arrow Lake U (Redwood Cove - Crestmont)): Hardware+Software 06_C5H stepping 2 (Arrow Lake H (Lion Cove - Skymont)): Hardware+Software 06_C6H stepping 2 (Arrow Lake H/HX/S/S Plus (Lion Cove - Skymont)): Hardware+Software | Intel’s list |
| Lunar Lake | Affected | 06_BDH stepping 1 (Lunar Lake (Lion Cove - Skymont)): Hardware+Software | Intel’s list |
| Panther Lake | Affected | 06_CCH stepping 2 - 3 (Panther Lake (Cougar Cove - Darkmont)): Hardware+Software | Intel’s list |
| Nova Lake | Affected | Linux 7.3 sets the bug on INTEL_NOVALAKE, INTEL_NOVALAKE_L: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Skylake-SP | Affected | 06_55H stepping 3 (Skylake Server): MCU+Software 06_55H stepping 4 (1. Skylake Server - 2. Skylake D/Bakerville): MCU+Software | Intel’s list |
| Cascade Lake | Affected | Linux 7.3 sets the bug on INTEL_SKYLAKE_X steppings 5 to 7: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Cooper Lake | Affected | 06_55H stepping B (Cooper Lake): Hardware+Software | Intel’s list |
| Ice Lake (server) | Affected | 06_6AH stepping 6 (Ice Lake Xeon-SP): Hardware+Software 06_6CH stepping All (Ice Lake Xeon D (Idaville)): Hardware+Software | Intel’s list |
| Emerald Rapids | Affected | 06_CFH stepping 2 (Emerald Rapids (Raptor Cove)): Hardware+Software | Intel’s list |
| Sapphire Rapids | Affected | 06_8FH stepping 5 - 6 - 7 - 8 (1. Sapphire Rapids - 2. Sapphire Rapids Edge Enhanced (Golden Cove)): Hardware+Software 06_8FH stepping 5 - 6 - 8 (Sapphire Rapids (Golden Cove) - Sapphire Rapids HBM): Hardware+Software | Intel’s list |
| Granite Rapids | Affected | 06_ADH stepping 1 (Granite Rapids (Redwood Cove)): Hardware+Software 06_ADH stepping 1 (Granite Rapids (Redwood Cove)): Hardware+Software 06_ADH stepping 1 (Granite Rapids R1S (Redwood Cove)): Hardware+Software 06_AEH stepping 1 (Granite Rapids D (Redwood Cove)/Kaseyville): Hardware+Software | Intel’s list |
| Sierra Forest | Affected | 06_AFH stepping 3 (Sierra Forest (Crestmont)): Hardware+Software | Intel’s list |
| Clearwater Forest | Affected | 06_DDH stepping 1 (Clearwater Forest (Darkmont)): Hardware+Software | Intel’s list |
| Diamond Rapids | Affected | Linux 7.3 sets the bug on INTEL_DIAMONDRAPIDS_X: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Silvermont | Affected | Linux 7.3 sets the bug on INTEL_ATOM_SILVERMONT, INTEL_ATOM_SILVERMONT_D, INTEL_ATOM_SILVERMONT_MID, INTEL_ATOM_SILVERMONT_MID2: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Airmont | Affected | Linux 7.3 sets the bug on INTEL_ATOM_AIRMONT, INTEL_ATOM_AIRMONT_NP: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Goldmont | Affected | 06_5CH stepping A (Apollo Lake): MCU+Software 06_5FH stepping All (Denverton (Goldmont)): MCU+Software | Intel’s list |
| Goldmont Plus | Affected | 06_7AH stepping 8 (Gemini Lake): MCU+Software | Intel’s list |
| Tremont | Affected | 06_86H stepping 5 (Snow Ridge BTS (Tremont)): Hardware+Software 06_86H stepping 7 (Parker Ridge / Snow Ridge NS/NX/BTS): Hardware+Software 06_96H stepping All (Elkhart Lake (Tremont)): Hardware+Software 06_9CH stepping All (Jasper Lake (Tremont)): Hardware+Software | Intel’s list |
| Gracemont | Affected | 06_9AH stepping 4 (Arizona Beach (Gracemont)): Hardware+Software 06_BEH stepping 0 (Alder Lake N (Gracemont)/Twin Lake): Hardware+Software | Intel’s list |
| Knights Landing | Affected | Linux 7.3 sets the bug on INTEL_XEON_PHI_KNL: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Knights Mill | Affected | Linux 7.3 sets the bug on INTEL_XEON_PHI_KNM: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| K8 (Hammer) | Affected | Linux 7.3 sets the bug on AMD family Fh: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| K10 (Family 10h) | Affected | Linux 7.3 sets the bug on AMD family 10h, AMD family 12h: cpu_vuln_whitelist does not list them with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Bulldozer | Affected | Linux 7.3 sets the bug on AMD family 15h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Piledriver | Affected | Linux 7.3 sets the bug on AMD family 15h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Steamroller | Affected | Linux 7.3 sets the bug on AMD family 15h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Excavator | Affected | Linux 7.3 sets the bug on AMD family 15h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen | Affected | Linux 7.3 sets the bug on AMD family 17h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen+ | Affected | Linux 7.3 sets the bug on AMD family 17h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen 2 | Affected | Linux 7.3 sets the bug on AMD family 17h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen 3 | Affected | Linux 7.3 sets the bug on AMD family 19h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen 4 | Affected | Linux 7.3 sets the bug on AMD family 19h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen 5 | Affected | Linux 7.3 sets the bug on AMD family 1Ah: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Zen 6 | Affected | Linux 7.3 sets the bug on AMD family 1Ah: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Bobcat | Affected | Linux 7.3 sets the bug on AMD family 14h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Jaguar | Affected | Linux 7.3 sets the bug on AMD family 16h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Puma | Affected | Linux 7.3 sets the bug on AMD family 16h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Dhyana | Affected | Linux 7.3 sets the bug on Hygon family 18h: cpu_vuln_whitelist does not list it with NO_SPECULATION or NO_SPECTRE_V2 | Linux 7.3 |
| Bonnell | Not affected | Linux 7.3 lists INTEL_ATOM_BONNELL, INTEL_ATOM_BONNELL_MID in cpu_vuln_whitelist with NO_SPECULATION | Linux 7.3 |
| Saltwell | Not affected | Linux 7.3 lists INTEL_ATOM_SALTWELL, INTEL_ATOM_SALTWELL_MID, INTEL_ATOM_SALTWELL_TABLET in cpu_vuln_whitelist with NO_SPECULATION | Linux 7.3 |
| LuJiaZui | Not affected | Linux 7.3 lists Centaur family 7, Zhaoxin family 7 in cpu_vuln_whitelist with NO_SPECTRE_V2 | Linux 7.3 |
| Century Avenue (Shijidadao) | Not affected | Linux 7.3 lists Centaur family 7, Zhaoxin family 7 in cpu_vuln_whitelist with NO_SPECTRE_V2 | Linux 7.3 |
Mitigations
- Compiler: Retpolines: the compiler turns each indirect call or jump in the kernel into a return through a thunk whose speculative path loops in place, so no poisoned prediction is followed. Source.
- Microcode: IBRS, STIBP and IBPB: microcode adds IA32_SPEC_CTRL (MSR 48H), whose bits restrict indirect branch speculation (IBRS) and stop sharing predictions between the threads of a core (STIBP), and IA32_PRED_CMD (MSR 49H), a write of whose bit 0 is a barrier (IBPB) that discards earlier predictions. Linux uses IBPB between processes of different users. Instructions: WRMSR. Source.
- Hardware: Enhanced IBRS (Intel) and Automatic IBRS (AMD): set once at boot, they keep predictions made in a less privileged mode out of more privileged ones; Linux then turns retpolines off. Source.
How to check a machine
On Linux, /sys/devices/system/cpu/vulnerabilities/spectre_v2 holds one of these lines:
Not affectedVulnerableMitigation: RetpolinesMitigation: Enhanced / Automatic IBRSMitigation: Enhanced / Automatic IBRS + LFENCEMitigation: Enhanced / Automatic IBRS + RetpolinesMitigation: IBRSVulnerable: LFENCE
A mitigation is followed by the state of IBPB, STIBP, RSB filling, PBRSB-eIBRS and BHI, each after a semicolon. Source.
Related CVEs
- CVE-2021-26401 LFENCE/JMP mitigation
- CVE-2022-0001 Branch History Injection
- CVE-2022-0002 Intra-mode Branch Target Injection
- CVE-2022-26373 Post-barrier Return Stack Buffer Predictions
- CVE-2024-2201 Native Branch History Injection