From c730c3b3b1845cc7c4a4aceff2031f1135faa6bb Mon Sep 17 00:00:00 2001 From: tb <> Date: Sat, 24 Feb 2024 15:30:14 +0000 Subject: Replace uses of endbr64 with _CET_ENDBR from cet.h cet.h is needed for other platforms to emit the relevant .gnu.properties sections that are necessary for them to enable IBT. It also avoids issues with older toolchains on macOS that explode on encountering endbr64. based on a diff by kettenis ok beck kettenis --- src/lib/libcrypto/bn/arch/amd64/bignum_add.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_cmul.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_mul.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_sqr.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S | 2 +- src/lib/libcrypto/bn/arch/amd64/bignum_sub.S | 2 +- src/lib/libcrypto/bn/arch/amd64/word_clz.S | 2 +- src/lib/libcrypto/bn/asm/modexp512-x86_64.pl | 10 +++++----- src/lib/libcrypto/bn/asm/x86_64-mont.pl | 6 +++--- src/lib/libcrypto/bn/asm/x86_64-mont5.pl | 10 +++++----- src/lib/libcrypto/bn/s2n_bignum_internal.h | 6 ++++++ 15 files changed, 30 insertions(+), 24 deletions(-) (limited to 'src/lib/libcrypto/bn') diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_add.S b/src/lib/libcrypto/bn/arch/amd64/bignum_add.S index 06298ca69e..5fe4aae7a1 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_add.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_add.S @@ -49,7 +49,7 @@ S2N_BN_SYMBOL(bignum_add): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S b/src/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S index 5ad712749f..25ba17bce2 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S @@ -54,7 +54,7 @@ S2N_BN_SYMBOL(bignum_cmadd): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_cmul.S b/src/lib/libcrypto/bn/arch/amd64/bignum_cmul.S index 9199c8f48b..12f785d63a 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_cmul.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_cmul.S @@ -51,7 +51,7 @@ S2N_BN_SYMBOL(bignum_cmul): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_mul.S b/src/lib/libcrypto/bn/arch/amd64/bignum_mul.S index 2d7ed19091..a3552679a2 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_mul.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_mul.S @@ -59,7 +59,7 @@ S2N_BN_SYMBOL(bignum_mul): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S b/src/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S index f02b09b288..70ff69e372 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S @@ -72,7 +72,7 @@ adc h, rdx S2N_BN_SYMBOL(bignum_mul_4_8_alt): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S b/src/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S index 97be83e1f7..066403b074 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S @@ -72,7 +72,7 @@ adc h, rdx S2N_BN_SYMBOL(bignum_mul_8_16_alt): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr.S b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr.S index c4a0cabf35..54e3f59442 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr.S @@ -62,7 +62,7 @@ #define llshort ebp S2N_BN_SYMBOL(bignum_sqr): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S index b228414dce..7c534ae907 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S @@ -71,7 +71,7 @@ adc c, 0 S2N_BN_SYMBOL(bignum_sqr_4_8_alt): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S index 04efeec7e2..ac0b6f96c2 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S @@ -103,7 +103,7 @@ adc c, 0 S2N_BN_SYMBOL(bignum_sqr_8_16_alt): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/bignum_sub.S b/src/lib/libcrypto/bn/arch/amd64/bignum_sub.S index 11a9bd7edd..3ff8a30510 100644 --- a/src/lib/libcrypto/bn/arch/amd64/bignum_sub.S +++ b/src/lib/libcrypto/bn/arch/amd64/bignum_sub.S @@ -49,7 +49,7 @@ S2N_BN_SYMBOL(bignum_sub): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/arch/amd64/word_clz.S b/src/lib/libcrypto/bn/arch/amd64/word_clz.S index 464a9d90fc..3926fcd4b0 100644 --- a/src/lib/libcrypto/bn/arch/amd64/word_clz.S +++ b/src/lib/libcrypto/bn/arch/amd64/word_clz.S @@ -30,7 +30,7 @@ .text S2N_BN_SYMBOL(word_clz): - endbr64 + _CET_ENDBR #if WINDOWS_ABI push rdi diff --git a/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl b/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl index af78fff541..8645d5adcc 100644 --- a/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl +++ b/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl @@ -347,7 +347,7 @@ $code.=<<___; .type MULADD_128x512,\@abi-omnipotent .align 16 MULADD_128x512: - endbr64 + _CET_ENDBR ___ &MULSTEP_512([map("%r$_",(8..15))], "(+8*0)(%rcx)", "%rsi", "%rbp", "%rbx"); $code.=<<___; @@ -415,7 +415,7 @@ $code.=<<___; .type mont_reduce,\@abi-omnipotent .align 16 mont_reduce: - endbr64 + _CET_ENDBR ___ my $STACK_DEPTH = 8; @@ -678,7 +678,7 @@ $code.=<<___; .type mont_mul_a3b,\@abi-omnipotent .align 16 mont_mul_a3b: - endbr64 + _CET_ENDBR # # multiply tmp = src1 * src2 # For multiply: dst = rcx, src1 = rdi, src2 = rsi @@ -1080,7 +1080,7 @@ $code.=<<___; .type sqr_reduce,\@abi-omnipotent .align 16 sqr_reduce: - endbr64 + _CET_ENDBR mov (+$pResult_offset+8)(%rsp), %rcx ___ &SQR_512("%rsp+$tmp16_offset+8", "%rcx", [map("%r$_",(10..15,8..9))], "%rbx", "%rbp", "%rsi", "%rdi"); @@ -1110,7 +1110,7 @@ $code.=<<___; .globl mod_exp_512 .type mod_exp_512,\@function,4 mod_exp_512: - endbr64 + _CET_ENDBR push %rbp push %rbx push %r12 diff --git a/src/lib/libcrypto/bn/asm/x86_64-mont.pl b/src/lib/libcrypto/bn/asm/x86_64-mont.pl index 6f5ab331e2..30cfab4fce 100755 --- a/src/lib/libcrypto/bn/asm/x86_64-mont.pl +++ b/src/lib/libcrypto/bn/asm/x86_64-mont.pl @@ -63,7 +63,7 @@ $code=<<___; .type bn_mul_mont,\@function,6 .align 16 bn_mul_mont: - endbr64 + _CET_ENDBR test \$3,${num}d jnz .Lmul_enter cmp \$8,${num}d @@ -279,7 +279,7 @@ $code.=<<___; .align 16 bn_mul4x_mont: .Lmul4x_enter: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -707,7 +707,7 @@ $code.=<<___; .align 16 bn_sqr4x_mont: .Lsqr4x_enter: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 diff --git a/src/lib/libcrypto/bn/asm/x86_64-mont5.pl b/src/lib/libcrypto/bn/asm/x86_64-mont5.pl index 3b3325a6cc..38751ec5de 100755 --- a/src/lib/libcrypto/bn/asm/x86_64-mont5.pl +++ b/src/lib/libcrypto/bn/asm/x86_64-mont5.pl @@ -57,7 +57,7 @@ $code=<<___; .type bn_mul_mont_gather5,\@function,6 .align 64 bn_mul_mont_gather5: - endbr64 + _CET_ENDBR test \$3,${num}d jnz .Lmul_enter cmp \$8,${num}d @@ -388,7 +388,7 @@ $code.=<<___; .type bn_mul4x_mont_gather5,\@function,6 .align 16 bn_mul4x_mont_gather5: - endbr64 + _CET_ENDBR .Lmul4x_enter: mov ${num}d,${num}d movd `($win64?56:8)`(%rsp),%xmm5 # load 7th argument @@ -927,7 +927,7 @@ $code.=<<___; .type bn_scatter5,\@abi-omnipotent .align 16 bn_scatter5: - endbr64 + _CET_ENDBR cmp \$0, $num jz .Lscatter_epilogue lea ($tbl,$idx,8),$tbl @@ -946,7 +946,7 @@ bn_scatter5: .type bn_gather5,\@abi-omnipotent .align 16 bn_gather5: - endbr64 + _CET_ENDBR .LSEH_begin_bn_gather5: # Win64 thing, but harmless in other cases # I can't trust assembler to use specific encoding:-( .byte 0x4c,0x8d,0x14,0x24 # lea (%rsp),%r10 @@ -1057,7 +1057,7 @@ $code.=<<___; .type mul_handler,\@abi-omnipotent .align 16 mul_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/src/lib/libcrypto/bn/s2n_bignum_internal.h b/src/lib/libcrypto/bn/s2n_bignum_internal.h index f413688338..b82db7d019 100644 --- a/src/lib/libcrypto/bn/s2n_bignum_internal.h +++ b/src/lib/libcrypto/bn/s2n_bignum_internal.h @@ -18,6 +18,12 @@ # define S2N_BN_SYMBOL(name) name #endif +#ifdef __CET__ +# include +#else +# define _CET_ENDBR +#endif + #define S2N_BN_SYM_VISIBILITY_DIRECTIVE(name) .globl S2N_BN_SYMBOL(name) #ifdef S2N_BN_HIDE_SYMBOLS # ifdef __APPLE__ -- cgit v1.2.3-55-g6feb