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