| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- .. SPDX-License-Identifier: GPL-2.0
- GDS - Gather Data Sampling
- ==========================
- Gather Data Sampling is a hardware vulnerability which allows unprivileged
- speculative access to data which was previously stored in vector registers.
- Problem
- -------
- When a gather instruction performs loads from memory, different data elements
- are merged into the destination vector register. However, when a gather
- instruction that is transiently executed encounters a fault, stale data from
- architectural or internal vector registers may get transiently forwarded to the
- destination vector register instead. This will allow a malicious attacker to
- infer stale data using typical side channel techniques like cache timing
- attacks. GDS is a purely sampling-based attack.
- The attacker uses gather instructions to infer the stale vector register data.
- The victim does not need to do anything special other than use the vector
- registers. The victim does not need to use gather instructions to be
- vulnerable.
- Because the buffers are shared between Hyper-Threads cross Hyper-Thread attacks
- are possible.
- Attack scenarios
- ----------------
- Without mitigation, GDS can infer stale data across virtually all
- permission boundaries:
- Non-enclaves can infer SGX enclave data
- Userspace can infer kernel data
- Guests can infer data from hosts
- Guest can infer guest from other guests
- Users can infer data from other users
- Because of this, it is important to ensure that the mitigation stays enabled in
- lower-privilege contexts like guests and when running outside SGX enclaves.
- The hardware enforces the mitigation for SGX. Likewise, VMMs should ensure
- that guests are not allowed to disable the GDS mitigation. If a host erred and
- allowed this, a guest could theoretically disable GDS mitigation, mount an
- attack, and re-enable it.
- Mitigation mechanism
- --------------------
- This issue is mitigated in microcode. The microcode defines the following new
- bits:
- ================================ === ============================
- IA32_ARCH_CAPABILITIES[GDS_CTRL] R/O Enumerates GDS vulnerability
- and mitigation support.
- IA32_ARCH_CAPABILITIES[GDS_NO] R/O Processor is not vulnerable.
- IA32_MCU_OPT_CTRL[GDS_MITG_DIS] R/W Disables the mitigation
- 0 by default.
- IA32_MCU_OPT_CTRL[GDS_MITG_LOCK] R/W Locks GDS_MITG_DIS=0. Writes
- to GDS_MITG_DIS are ignored
- Can't be cleared once set.
- ================================ === ============================
- GDS can also be mitigated on systems that don't have updated microcode by
- disabling AVX. This can be done by setting gather_data_sampling="force" or
- "clearcpuid=avx" on the kernel command-line.
- If used, these options will disable AVX use by turning off XSAVE YMM support.
- However, the processor will still enumerate AVX support. Userspace that
- does not follow proper AVX enumeration to check both AVX *and* XSAVE YMM
- support will break.
- Mitigation control on the kernel command line
- ---------------------------------------------
- The mitigation can be disabled by setting "gather_data_sampling=off" or
- "mitigations=off" on the kernel command line. Not specifying either will default
- to the mitigation being enabled. Specifying "gather_data_sampling=force" will
- use the microcode mitigation when available or disable AVX on affected systems
- where the microcode hasn't been updated to include the mitigation.
- GDS System Information
- ------------------------
- The kernel provides vulnerability status information through sysfs. For
- GDS this can be accessed by the following sysfs file:
- /sys/devices/system/cpu/vulnerabilities/gather_data_sampling
- The possible values contained in this file are:
- ============================== =============================================
- Not affected Processor not vulnerable.
- Vulnerable Processor vulnerable and mitigation disabled.
- Vulnerable: No microcode Processor vulnerable and microcode is missing
- mitigation.
- Mitigation: AVX disabled,
- no microcode Processor is vulnerable and microcode is missing
- mitigation. AVX disabled as mitigation.
- Mitigation: Microcode Processor is vulnerable and mitigation is in
- effect.
- Mitigation: Microcode (locked) Processor is vulnerable and mitigation is in
- effect and cannot be disabled.
- Unknown: Dependent on
- hypervisor status Running on a virtual guest processor that is
- affected but with no way to know if host
- processor is mitigated or vulnerable.
- ============================== =============================================
- GDS Default mitigation
- ----------------------
- The updated microcode will enable the mitigation by default. The kernel's
- default action is to leave the mitigation enabled.
|