]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/entry: Have entry_ibpb() invalidate return predictions
authorJohannes Wikner <kwikner@ethz.ch>
Mon, 23 Sep 2024 18:49:36 +0000 (20:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Oct 2024 13:39:26 +0000 (15:39 +0200)
commit 50e4b3b94090babe8d4bb85c95f0d3e6b07ea86e upstream.

entry_ibpb() should invalidate all indirect predictions, including return
target predictions. Not all IBPB implementations do this, in which case the
fallback is RSB filling.

Prevent SRSO-style hijacks of return predictions following IBPB, as the return
target predictor can be corrupted before the IBPB completes.

  [ bp: Massage. ]

Signed-off-by: Johannes Wikner <kwikner@ethz.ch>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/entry/entry.S

index 09e99d13fc0b307169c6d611a1fe71aa04db2a35..f4419afc7147d840193248d616a6889839995de2 100644 (file)
@@ -9,6 +9,8 @@
 #include <asm/unwind_hints.h>
 #include <asm/segment.h>
 #include <asm/cache.h>
+#include <asm/cpufeatures.h>
+#include <asm/nospec-branch.h>
 
 .pushsection .noinstr.text, "ax"
 
@@ -17,6 +19,9 @@ SYM_FUNC_START(entry_ibpb)
        movl    $PRED_CMD_IBPB, %eax
        xorl    %edx, %edx
        wrmsr
+
+       /* Make sure IBPB clears return stack preductions too. */
+       FILL_RETURN_BUFFER %rax, RSB_CLEAR_LOOPS, X86_BUG_IBPB_NO_RET
        RET
 SYM_FUNC_END(entry_ibpb)
 /* For KVM */