]> git.itanic.dy.fi Git - linux-stable/commitdiff
x86/ibt: Add ANNOTATE_NOENDBR
authorPeter Zijlstra <peterz@infradead.org>
Tue, 8 Mar 2022 15:30:18 +0000 (16:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Aug 2023 12:23:39 +0000 (14:23 +0200)
[ Upstream commit c8c301abeae58ec756b8fcb2178a632bd3c9e284 ]

In order to have objtool warn about code references to !ENDBR
instruction, we need an annotation to allow this for non-control-flow
instances -- consider text range checks, text patching, or return
trampolines etc.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/r/20220308154317.578968224@infradead.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/objtool.h
tools/include/linux/objtool.h

index d59e69df821eb8518bdc604ce44080275ace9960..51f5b24af8342c92531dea791c87d23365200425 100644 (file)
@@ -82,6 +82,12 @@ struct unwind_hint {
 #define STACK_FRAME_NON_STANDARD_FP(func)
 #endif
 
+#define ANNOTATE_NOENDBR                                       \
+       "986: \n\t"                                             \
+       ".pushsection .discard.noendbr\n\t"                     \
+       _ASM_PTR " 986b\n\t"                                    \
+       ".popsection\n\t"
+
 #else /* __ASSEMBLY__ */
 
 /*
@@ -134,6 +140,13 @@ struct unwind_hint {
        .popsection
 .endm
 
+.macro ANNOTATE_NOENDBR
+.Lhere_\@:
+       .pushsection .discard.noendbr
+       .quad   .Lhere_\@
+       .popsection
+.endm
+
 #endif /* __ASSEMBLY__ */
 
 #else /* !CONFIG_STACK_VALIDATION */
@@ -144,12 +157,15 @@ struct unwind_hint {
        "\n\t"
 #define STACK_FRAME_NON_STANDARD(func)
 #define STACK_FRAME_NON_STANDARD_FP(func)
+#define ANNOTATE_NOENDBR
 #else
 #define ANNOTATE_INTRA_FUNCTION_CALL
 .macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0
 .endm
 .macro STACK_FRAME_NON_STANDARD func:req
 .endm
+.macro ANNOTATE_NOENDBR
+.endm
 #endif
 
 #endif /* CONFIG_STACK_VALIDATION */
index d59e69df821eb8518bdc604ce44080275ace9960..51f5b24af8342c92531dea791c87d23365200425 100644 (file)
@@ -82,6 +82,12 @@ struct unwind_hint {
 #define STACK_FRAME_NON_STANDARD_FP(func)
 #endif
 
+#define ANNOTATE_NOENDBR                                       \
+       "986: \n\t"                                             \
+       ".pushsection .discard.noendbr\n\t"                     \
+       _ASM_PTR " 986b\n\t"                                    \
+       ".popsection\n\t"
+
 #else /* __ASSEMBLY__ */
 
 /*
@@ -134,6 +140,13 @@ struct unwind_hint {
        .popsection
 .endm
 
+.macro ANNOTATE_NOENDBR
+.Lhere_\@:
+       .pushsection .discard.noendbr
+       .quad   .Lhere_\@
+       .popsection
+.endm
+
 #endif /* __ASSEMBLY__ */
 
 #else /* !CONFIG_STACK_VALIDATION */
@@ -144,12 +157,15 @@ struct unwind_hint {
        "\n\t"
 #define STACK_FRAME_NON_STANDARD(func)
 #define STACK_FRAME_NON_STANDARD_FP(func)
+#define ANNOTATE_NOENDBR
 #else
 #define ANNOTATE_INTRA_FUNCTION_CALL
 .macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0
 .endm
 .macro STACK_FRAME_NON_STANDARD func:req
 .endm
+.macro ANNOTATE_NOENDBR
+.endm
 #endif
 
 #endif /* CONFIG_STACK_VALIDATION */