libsanitizer: On aarch64 use hint #34 in prologue of libsanitizer functions
When gcc is built with -mbranch-protection=standard, running sanitized programs doesn't work properly on bti enabled kernels. This has been fixed upstream with https://github.com/llvm/llvm-project/pull/84061 The following patch cherry picks that from upstream. For trunk we should eventually do a full merge from upstream, but I'm hoping they will first fix up the _BitInt libubsan support mess. 2024-09-05 Jakub Jelinek <jakub@redhat.com> * sanitizer_common/sanitizer_asm.h: Cherry-pick llvm-project revision 1c792d24e0a228ad49cc004a1c26bbd7cd87f030. * interception/interception.h: Likewise.
This commit is contained in:
parent
a50f54c0d0
commit
2379cbb94b
2 changed files with 14 additions and 4 deletions
|
@ -204,11 +204,11 @@ const interpose_substitution substitution_##func_name[] \
|
|||
".type " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " \
|
||||
ASM_TYPE_FUNCTION_STR "\n" \
|
||||
SANITIZER_STRINGIFY(TRAMPOLINE(func)) ":\n" \
|
||||
SANITIZER_STRINGIFY(CFI_STARTPROC) "\n" \
|
||||
C_ASM_STARTPROC "\n" \
|
||||
C_ASM_TAIL_CALL(SANITIZER_STRINGIFY(TRAMPOLINE(func)), \
|
||||
"__interceptor_" \
|
||||
SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func))) "\n" \
|
||||
SANITIZER_STRINGIFY(CFI_ENDPROC) "\n" \
|
||||
C_ASM_ENDPROC "\n" \
|
||||
".size " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " \
|
||||
".-" SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" \
|
||||
);
|
||||
|
|
|
@ -42,6 +42,16 @@
|
|||
# define CFI_RESTORE(reg)
|
||||
#endif
|
||||
|
||||
#if defined(__aarch64__) && defined(__ARM_FEATURE_BTI_DEFAULT)
|
||||
# define ASM_STARTPROC CFI_STARTPROC; hint #34
|
||||
# define C_ASM_STARTPROC SANITIZER_STRINGIFY(CFI_STARTPROC) "\nhint #34"
|
||||
#else
|
||||
# define ASM_STARTPROC CFI_STARTPROC
|
||||
# define C_ASM_STARTPROC SANITIZER_STRINGIFY(CFI_STARTPROC)
|
||||
#endif
|
||||
#define ASM_ENDPROC CFI_ENDPROC
|
||||
#define C_ASM_ENDPROC SANITIZER_STRINGIFY(CFI_ENDPROC)
|
||||
|
||||
#if defined(__x86_64__) || defined(__i386__) || defined(__sparc__)
|
||||
# define ASM_TAIL_CALL jmp
|
||||
#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || \
|
||||
|
@ -114,9 +124,9 @@
|
|||
.globl __interceptor_trampoline_##name; \
|
||||
ASM_TYPE_FUNCTION(__interceptor_trampoline_##name); \
|
||||
__interceptor_trampoline_##name: \
|
||||
CFI_STARTPROC; \
|
||||
ASM_STARTPROC; \
|
||||
ASM_TAIL_CALL ASM_PREEMPTIBLE_SYM(__interceptor_##name); \
|
||||
CFI_ENDPROC; \
|
||||
ASM_ENDPROC; \
|
||||
ASM_SIZE(__interceptor_trampoline_##name)
|
||||
# define ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT 1
|
||||
# endif // Architecture supports interceptor trampoline
|
||||
|
|
Loading…
Add table
Reference in a new issue