| L1D Flushing |
| ============ |
| |
| With an increasing number of vulnerabilities being reported around data |
| leaks from the Level 1 Data cache (L1D) the kernel provides an opt-in |
| mechanism to flush the L1D cache on context switch. |
| |
| This mechanism can be used to address e.g. CVE-2020-0550. For applications |
| the mechanism keeps them safe from vulnerabilities, related to leaks |
| (snooping of) from the L1D cache. |
| |
| |
| Related CVEs |
| ------------ |
| The following CVEs can be addressed by this |
| mechanism |
| |
| ============= ======================== ================== |
| CVE-2020-0550 Improper Data Forwarding OS related aspects |
| ============= ======================== ================== |
| |
| Usage Guidelines |
| ---------------- |
| |
| Please see document: :ref:`Documentation/userspace-api/spec_ctrl.rst |
| <set_spec_ctrl>` for details. |
| |
| **NOTE**: The feature is disabled by default, applications need to |
| specifically opt into the feature to enable it. |
| |
| Mitigation |
| ---------- |
| |
| When PR_SET_L1D_FLUSH is enabled for a task a flush of the L1D cache is |
| performed when the task is scheduled out and the incoming task belongs to a |
| different process and therefore to a different address space. |
| |
| If the underlying CPU supports L1D flushing in hardware, the hardware |
| mechanism is used, software fallback for the mitigation, is not supported. |
| |
| Mitigation control on the kernel command line |
| --------------------------------------------- |
| |
| The kernel command line allows to control the L1D flush mitigations at boot |
| time with the option "l1d_flush=". The valid arguments for this option are: |
| |
| ============ ============================================================= |
| on Enables the prctl interface, applications trying to use |
| the prctl() will fail with an error if l1d_flush is not |
| enabled |
| ============ ============================================================= |
| |
| By default the mechanism is disabled. |
| |
| Limitations |
| ----------- |
| |
| The mechanism does not mitigate L1D data leaks between tasks belonging to |
| different processes which are concurrently executing on sibling threads of |
| a physical CPU core when SMT is enabled on the system. |
| |
| This can be addressed by controlled placement of processes on physical CPU |
| cores or by disabling SMT. See the relevant chapter in the L1TF mitigation |
| document: :ref:`Documentation/admin-guide/hw-vuln/l1tf.rst <smt_control>`. |
| |
| **NOTE** : The opt-in of a task for L1D flushing works only when the task's |
| affinity is limited to cores running in non-SMT mode. If a task which |
| requested L1D flushing is scheduled on a SMT-enabled core the kernel sends |
| a SIGBUS to the task. |