110 lines
5.0 KiB
ReStructuredText
110 lines
5.0 KiB
ReStructuredText
.. 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.
|