| .. 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. |