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