+16
-5
Documentation/admin-guide/hw-vuln/spectre.rst
+16
-5
Documentation/admin-guide/hw-vuln/spectre.rst
···
479
479
On Intel Skylake-era systems the mitigation covers most, but not all,
480
480
cases. See :ref:`[3] <spec_ref3>` for more details.
481
481
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
484
492
485
493
The retpoline mitigation is turned on by default on vulnerable
486
494
CPUs. It can be forced on or off by the administrator
···
512
504
For Spectre variant 2 mitigation, individual user programs
513
505
can be compiled with return trampolines for indirect branches.
514
506
This protects them from consuming poisoned entries in the branch
515
-
target buffer left by malicious software. Alternatively, the
516
-
programs can disable their indirect branch speculation via prctl()
517
-
(See :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
507
+
target buffer left by malicious software.
508
+
509
+
On legacy IBRS systems, at return to userspace, implicit STIBP is disabled
510
+
because the kernel clears the IBRS bit. In this case, the userspace programs
511
+
can disable indirect branch speculation via prctl() (See
512
+
:ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
518
513
On x86, this will turn on STIBP to guard against attacks from the
519
514
sibling thread when the user program is running, and use IBPB to
520
515
flush the branch target buffer when switching to/from the program.