Processor vulnerability
CVE-2017-5753
An index or pointer that a check rejects can still be used speculatively before the branch resolves, and the access leaves a trace of secret data in the cache.
- Name
- Bounds Check Bypass
- Also known as
- Spectre variant 1, Variant 1
- Vulnerability
- Spectre variant 1
- Kind
- Transient execution
- CVE published
- 2018-01-04 CVE record
- Advisories
- INTEL-SA-00088
- Linux reports it in
spectre_v1
A program that receives an array index from an untrusted caller compares it with the array’s length and branches. The processor predicts that branch, and when the attacker has trained the predictor to expect an index in range, it goes on to load from the array with an index that is out of range, before the compare is done. The load reads memory that the program never meant to expose; a second load whose address depends on that value brings a line into the cache that the attacker can find by timing.
The same applies to any conditional branch, not only to bounds checks: Linux treats every test of untrusted input on its entry paths as a possible target. Linux reports variant 1 on every processor that speculates; among x86-64 processors, it lists only the Bonnell and Saltwell Atoms as not affected.
Affected processors
61 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 | 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 | 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 | 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 | 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 | 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 | 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 | Linux 7.3 |
| Haswell | Affected | 06_3FH stepping 2 (Haswell Server EP/EP4S): Software 06_3FH stepping 4 (Haswell Server EX): Software | Intel’s list |
| Broadwell | Affected | 06_4FH stepping 1 (1. Broadwell Server E/EP/EP4S - 2. Broadwell Server EX): Software 06_56H stepping 3 (Broadwell DE V2 - V3): Software 06_56H stepping 4 (Broadwell DE Y0): Software 06_56H stepping 5 (Hewitt Lake (Broadwell DE)): Software | Intel’s list |
| Skylake | Affected | 06_5EH stepping 3 (1. Skylake Xeon E3 - 2. Skylake H - 3. Skylake S): 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): Software 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Software 06_9EH stepping 9 (1. Kaby Lake S - 2. Kaby Lake Xeon E3): Software | Intel’s list |
| Coffee Lake | Affected | 06_8EH stepping A (1. Coffee Lake U43e - 2. Whiskey Lake): Software 06_8EH stepping B (Whiskey Lake U): Software 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Software 06_9EH stepping A (Coffee Lake H): Software 06_9EH stepping C (Coffee Lake S): Software 06_9EH stepping D (1. Coffee Lake H - 2. Coffee Lake Xeon E - 3. Coffee Lake S): 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 | Linux 7.3 |
| Comet Lake | Affected | 06_8EH stepping C (1. Whiskey Lake V - 2. Comet Lake U42 - 3. Amber Lake Y): Software 06_A5H stepping 2 (Comet Lake H): Software 06_A5H stepping 3 (Comet Lake-S): Software 06_A5H stepping 5 (Comet Lake-S): Software 06_A6H stepping 0 (Comet Lake U62): Software 06_A6H stepping 1 (Comet Lake U62): Software | Intel’s list |
| Ice Lake (client) | Affected | 06_7EH stepping 5 (Ice Lake U - Ice Lake Y): Software | Intel’s list |
| Tiger Lake | Affected | 06_8CH stepping 1 (Tiger Lake U): Software 06_8CH stepping 1 (Tiger Lake U): Software 06_8CH stepping 2 (1. Tiger Lake U Refresh - 2. Tiger Lake H35): Software 06_8DH stepping 1 (Tiger Lake H): Software 06_8DH stepping 1 (Tiger Lake H): Software | Intel’s list |
| Alder Lake | Affected | 06_97H stepping 2 (Alder Lake S (Golden Cove - Gracemont)): Software 06_97H stepping 5 (Alder Lake S (Golden Cove - Gracemont)): Software 06_97H stepping 5 (Catlow (Golden Cove)): Software 06_9AH stepping 3 (1. Alder Lake H (Golden Cove - Gracemont) - 2. Alder Lake P (Golden Cove - Gracemont)): Software 06_9AH stepping 4 (Alder Lake U (Golden Cove - Gracemont)): Software | Intel’s list |
| Rocket Lake | Affected | 06_A7H stepping 1 (Rocket Lake): Software | Intel’s list |
| Raptor Lake | Affected | 06_B7H stepping 1 (1. Raptor Lake S - 2. Raptor Lake HX (Raptor Cove/Gracemont)): Software 06_B7H stepping 1 (Catlow (Raptor Cove)): Software 06_BAH stepping 2 - 3 - 8 (1. Raptor Lake P - 2. Raptor Lake H + refresh - 3. Raptor Lake U + refresh (Raptor Cove/Gracemont)): Software 06_BFH stepping 2 - 5 (Raptor Lake S (Raptor Cove/Gracemont)): Software | Intel’s list |
| Meteor Lake | Affected | 06_AAH stepping 4 (Meteor Lake U/H/PS (Redwood Cove - Crestmont)): Software | Intel’s list |
| Arrow Lake | Affected | 06_B5H stepping 0 (Arrow Lake U (Redwood Cove - Crestmont)): Software 06_C5H stepping 2 (Arrow Lake H (Lion Cove - Skymont)): Software 06_C6H stepping 2 (Arrow Lake H/HX/S/S Plus (Lion Cove - Skymont)): Software | Intel’s list |
| Lunar Lake | Affected | 06_BDH stepping 1 (Lunar Lake (Lion Cove - Skymont)): Software | Intel’s list |
| Panther Lake | Affected | 06_CCH stepping 2 - 3 (Panther Lake (Cougar Cove - Darkmont)): 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 | Linux 7.3 |
| Skylake-SP | Affected | 06_55H stepping 3 (Skylake Server): Software 06_55H stepping 4 (1. Skylake Server - 2. Skylake D/Bakerville): 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 | Linux 7.3 |
| Cooper Lake | Affected | 06_55H stepping B (Cooper Lake): Software | Intel’s list |
| Ice Lake (server) | Affected | 06_6AH stepping 6 (Ice Lake Xeon-SP): Software 06_6CH stepping All (Ice Lake Xeon D (Idaville)): Software | Intel’s list |
| Emerald Rapids | Affected | 06_CFH stepping 2 (Emerald Rapids (Raptor Cove)): Software | Intel’s list |
| Sapphire Rapids | Affected | 06_8FH stepping 5 - 6 - 7 - 8 (1. Sapphire Rapids - 2. Sapphire Rapids Edge Enhanced (Golden Cove)): Software 06_8FH stepping 5 - 6 - 8 (Sapphire Rapids (Golden Cove) - Sapphire Rapids HBM): Software | Intel’s list |
| Granite Rapids | Affected | 06_ADH stepping 1 (Granite Rapids (Redwood Cove)): Software 06_ADH stepping 1 (Granite Rapids (Redwood Cove)): Software 06_ADH stepping 1 (Granite Rapids R1S (Redwood Cove)): Software 06_AEH stepping 1 (Granite Rapids D (Redwood Cove)/Kaseyville): Software | Intel’s list |
| Sierra Forest | Affected | 06_AFH stepping 3 (Sierra Forest (Crestmont)): Software | Intel’s list |
| Clearwater Forest | Affected | 06_DDH stepping 1 (Clearwater Forest (Darkmont)): 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 | 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 | 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 | Linux 7.3 |
| Goldmont | Affected | 06_5CH stepping A (Apollo Lake): Software 06_5FH stepping All (Denverton (Goldmont)): Software | Intel’s list |
| Goldmont Plus | Affected | 06_7AH stepping 8 (Gemini Lake): Software | Intel’s list |
| Tremont | Affected | 06_86H stepping 5 (Snow Ridge BTS (Tremont)): Software 06_86H stepping 7 (Parker Ridge / Snow Ridge NS/NX/BTS): Software 06_96H stepping All (Elkhart Lake (Tremont)): Software 06_9CH stepping All (Jasper Lake (Tremont)): Software | Intel’s list |
| Gracemont | Affected | 06_9AH stepping 4 (Arizona Beach (Gracemont)): Software 06_BEH stepping 0 (Alder Lake N (Gracemont)/Twin Lake): 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | Linux 7.3 |
| LuJiaZui | Affected | Linux 7.3 sets the bug on Centaur family 7, Zhaoxin family 7: cpu_vuln_whitelist does not list them with NO_SPECULATION | Linux 7.3 |
| Century Avenue (Shijidadao) | Affected | Linux 7.3 sets the bug on Centaur family 7, Zhaoxin family 7: cpu_vuln_whitelist does not list them with NO_SPECULATION | 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 |
Mitigations
- Kernel: Linux marks the places where untrusted values index arrays or form pointers and clamps them with its nospec accessors, which keep an out-of-range index in range even while the branch is mispredicted, and puts an LFENCE barrier in the code that copies data from user space, after the check of the user pointer. The boot option nospectre_v1 turns these barriers off. Instructions: LFENCE. Source.
- Programs: Programs mitigate it the same way, with an LFENCE after the check or by clamping the index ("bounds clipping"); the vendors' guidance describes both. Instructions: LFENCE. Source.
How to check a machine
On Linux, /sys/devices/system/cpu/vulnerabilities/spectre_v1 holds one of these lines:
Not affectedMitigation: usercopy/swapgs barriers and __user pointer sanitizationVulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers
Related CVEs
- CVE-2018-3693 Bounds Check Bypass Store
- CVE-2019-1125 Spectre v1 swapgs