| .. | .. |
|---|
| 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 |
|---|
| .. | .. |
|---|
| 504 | 512 | For Spectre variant 2 mitigation, individual user programs |
|---|
| 505 | 513 | can be compiled with return trampolines for indirect branches. |
|---|
| 506 | 514 | 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>`). |
|---|
| 510 | 521 | On x86, this will turn on STIBP to guard against attacks from the |
|---|
| 511 | 522 | sibling thread when the user program is running, and use IBPB to |
|---|
| 512 | 523 | flush the branch target buffer when switching to/from the program. |
|---|