| From e02b50ca442e88122e1302d4dbc1b71a4808c13f Mon Sep 17 00:00:00 2001 |
| From: KP Singh <kpsingh@kernel.org> |
| Date: Mon, 27 Feb 2023 07:05:41 +0100 |
| Subject: Documentation/hw-vuln: Document the interaction between IBRS and STIBP |
| |
| From: KP Singh <kpsingh@kernel.org> |
| |
| commit e02b50ca442e88122e1302d4dbc1b71a4808c13f upstream. |
| |
| Explain why STIBP is needed with legacy IBRS as currently implemented |
| (KERNEL_IBRS) and why STIBP is not needed when enhanced IBRS is enabled. |
| |
| Fixes: 7c693f54c873 ("x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS") |
| Signed-off-by: KP Singh <kpsingh@kernel.org> |
| Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> |
| Link: https://lore.kernel.org/r/20230227060541.1939092-2-kpsingh@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| Documentation/admin-guide/hw-vuln/spectre.rst | 21 ++++++++++++++++----- |
| 1 file changed, 16 insertions(+), 5 deletions(-) |
| |
| --- a/Documentation/admin-guide/hw-vuln/spectre.rst |
| +++ b/Documentation/admin-guide/hw-vuln/spectre.rst |
| @@ -479,8 +479,16 @@ Spectre variant 2 |
| On Intel Skylake-era systems the mitigation covers most, but not all, |
| cases. See :ref:`[3] <spec_ref3>` for more details. |
| |
| - On CPUs with hardware mitigation for Spectre variant 2 (e.g. Enhanced |
| - IBRS on x86), retpoline is automatically disabled at run time. |
| + On CPUs with hardware mitigation for Spectre variant 2 (e.g. IBRS |
| + or enhanced IBRS on x86), retpoline is automatically disabled at run time. |
| + |
| + Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at |
| + boot, by setting the IBRS bit, and they're automatically protected against |
| + Spectre v2 variant attacks, including cross-thread branch target injections |
| + on SMT systems (STIBP). In other words, eIBRS enables STIBP too. |
| + |
| + Legacy IBRS systems clear the IBRS bit on exit to userspace and |
| + therefore explicitly enable STIBP for that |
| |
| The retpoline mitigation is turned on by default on vulnerable |
| CPUs. It can be forced on or off by the administrator |
| @@ -504,9 +512,12 @@ Spectre variant 2 |
| For Spectre variant 2 mitigation, individual user programs |
| can be compiled with return trampolines for indirect branches. |
| This protects them from consuming poisoned entries in the branch |
| - target buffer left by malicious software. Alternatively, the |
| - programs can disable their indirect branch speculation via prctl() |
| - (See :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`). |
| + target buffer left by malicious software. |
| + |
| + On legacy IBRS systems, at return to userspace, implicit STIBP is disabled |
| + because the kernel clears the IBRS bit. In this case, the userspace programs |
| + can disable indirect branch speculation via prctl() (See |
| + :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`). |
| On x86, this will turn on STIBP to guard against attacks from the |
| sibling thread when the user program is running, and use IBPB to |
| flush the branch target buffer when switching to/from the program. |