]> www.infradead.org Git - users/hch/misc.git/commitdiff
x86/bugs: Do not use UNTRAIN_RET with IBPB on entry
authorJohannes Wikner <kwikner@ethz.ch>
Tue, 8 Oct 2024 10:58:03 +0000 (12:58 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Thu, 10 Oct 2024 08:38:21 +0000 (10:38 +0200)
Since X86_FEATURE_ENTRY_IBPB will invalidate all harmful predictions
with IBPB, no software-based untraining of returns is needed anymore.
Currently, this change affects retbleed and SRSO mitigations so if
either of the mitigations is doing IBPB and the other one does the
software sequence, the latter is not needed anymore.

  [ bp: Massage commit message. ]

Suggested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Johannes Wikner <kwikner@ethz.ch>
Cc: <stable@kernel.org>
arch/x86/kernel/cpu/bugs.c

index 4474c5a1cd9a70da2e4554e5861c245c4e034994..47a01d4028f60e012d1e625e1667842b52948038 100644 (file)
@@ -1115,6 +1115,15 @@ do_cmd_auto:
 
        case RETBLEED_MITIGATION_IBPB:
                setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
+
+               /*
+                * IBPB on entry already obviates the need for
+                * software-based untraining so clear those in case some
+                * other mitigation like SRSO has selected them.
+                */
+               setup_clear_cpu_cap(X86_FEATURE_UNRET);
+               setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
+
                setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
                mitigate_smt = true;
 
@@ -2635,6 +2644,14 @@ static void __init srso_select_mitigation(void)
                        if (has_microcode) {
                                setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
                                srso_mitigation = SRSO_MITIGATION_IBPB;
+
+                               /*
+                                * IBPB on entry already obviates the need for
+                                * software-based untraining so clear those in case some
+                                * other mitigation like Retbleed has selected them.
+                                */
+                               setup_clear_cpu_cap(X86_FEATURE_UNRET);
+                               setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
                        }
                } else {
                        pr_err("WARNING: kernel not compiled with MITIGATION_IBPB_ENTRY.\n");