hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/Documentation/admin-guide/hw-vuln/spectre.rst
....@@ -479,8 +479,16 @@
479479 On Intel Skylake-era systems the mitigation covers most, but not all,
480480 cases. See :ref:`[3] <spec_ref3>` for more details.
481481
482
- On CPUs with hardware mitigation for Spectre variant 2 (e.g. Enhanced
483
- IBRS on x86), retpoline is automatically disabled at run time.
482
+ On CPUs with hardware mitigation for Spectre variant 2 (e.g. IBRS
483
+ or enhanced IBRS on x86), retpoline is automatically disabled at run time.
484
+
485
+ Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at
486
+ boot, by setting the IBRS bit, and they're automatically protected against
487
+ Spectre v2 variant attacks, including cross-thread branch target injections
488
+ on SMT systems (STIBP). In other words, eIBRS enables STIBP too.
489
+
490
+ Legacy IBRS systems clear the IBRS bit on exit to userspace and
491
+ therefore explicitly enable STIBP for that
484492
485493 The retpoline mitigation is turned on by default on vulnerable
486494 CPUs. It can be forced on or off by the administrator
....@@ -504,9 +512,12 @@
504512 For Spectre variant 2 mitigation, individual user programs
505513 can be compiled with return trampolines for indirect branches.
506514 This protects them from consuming poisoned entries in the branch
507
- target buffer left by malicious software. Alternatively, the
508
- programs can disable their indirect branch speculation via prctl()
509
- (See :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
515
+ target buffer left by malicious software.
516
+
517
+ On legacy IBRS systems, at return to userspace, implicit STIBP is disabled
518
+ because the kernel clears the IBRS bit. In this case, the userspace programs
519
+ can disable indirect branch speculation via prctl() (See
520
+ :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
510521 On x86, this will turn on STIBP to guard against attacks from the
511522 sibling thread when the user program is running, and use IBPB to
512523 flush the branch target buffer when switching to/from the program.