From: tb Date: Sat, 24 Feb 2024 15:30:14 +0000 (+0000) Subject: Replace uses of endbr64 with _CET_ENDBR from cet.h X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=22787c513b4b59ee1fb13a32326a50f73cd342c1;p=openbsd 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 --- diff --git a/lib/libcrypto/aes/asm/aes-x86_64.pl b/lib/libcrypto/aes/asm/aes-x86_64.pl index 78ba20ca59f..299214800bc 100755 --- a/lib/libcrypto/aes/asm/aes-x86_64.pl +++ b/lib/libcrypto/aes/asm/aes-x86_64.pl @@ -318,7 +318,7 @@ $code.=<<___; .type _x86_64_AES_encrypt,\@abi-omnipotent .align 16 _x86_64_AES_encrypt: - endbr64 + _CET_ENDBR xor 0($key),$s0 # xor with key xor 4($key),$s1 xor 8($key),$s2 @@ -549,7 +549,7 @@ $code.=<<___; .type _x86_64_AES_encrypt_compact,\@abi-omnipotent .align 16 _x86_64_AES_encrypt_compact: - endbr64 + _CET_ENDBR lea 128($sbox),$inp # size optimization mov 0-128($inp),$acc1 # prefetch Te4 mov 32-128($inp),$acc2 @@ -595,7 +595,7 @@ $code.=<<___; .hidden asm_AES_encrypt asm_AES_encrypt: AES_encrypt: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -887,7 +887,7 @@ $code.=<<___; .type _x86_64_AES_decrypt,\@abi-omnipotent .align 16 _x86_64_AES_decrypt: - endbr64 + _CET_ENDBR xor 0($key),$s0 # xor with key xor 4($key),$s1 xor 8($key),$s2 @@ -1142,7 +1142,7 @@ $code.=<<___; .type _x86_64_AES_decrypt_compact,\@abi-omnipotent .align 16 _x86_64_AES_decrypt_compact: - endbr64 + _CET_ENDBR lea 128($sbox),$inp # size optimization mov 0-128($inp),$acc1 # prefetch Td4 mov 32-128($inp),$acc2 @@ -1197,7 +1197,7 @@ $code.=<<___; .hidden asm_AES_decrypt asm_AES_decrypt: AES_decrypt: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -1297,7 +1297,7 @@ $code.=<<___; .type AES_set_encrypt_key,\@function,3 .align 16 AES_set_encrypt_key: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 # redundant, but allows to share @@ -1323,7 +1323,7 @@ AES_set_encrypt_key: .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent .align 16 _x86_64_AES_set_encrypt_key: - endbr64 + _CET_ENDBR mov %esi,%ecx # %ecx=bits mov %rdi,%rsi # %rsi=userKey mov %rdx,%rdi # %rdi=key @@ -1569,7 +1569,7 @@ $code.=<<___; .type AES_set_decrypt_key,\@function,3 .align 16 AES_set_decrypt_key: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -1669,7 +1669,7 @@ $code.=<<___; .hidden asm_AES_cbc_encrypt asm_AES_cbc_encrypt: AES_cbc_encrypt: - endbr64 + _CET_ENDBR cmp \$0,%rdx # check length je .Lcbc_epilogue pushfq @@ -2561,7 +2561,7 @@ $code.=<<___; .type block_se_handler,\@abi-omnipotent .align 16 block_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2620,7 +2620,7 @@ block_se_handler: .type key_se_handler,\@abi-omnipotent .align 16 key_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2678,7 +2678,7 @@ key_se_handler: .type cbc_se_handler,\@abi-omnipotent .align 16 cbc_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/aes/asm/aesni-sha1-x86_64.pl b/lib/libcrypto/aes/asm/aesni-sha1-x86_64.pl index 879d16793f5..5eb5b7bf65f 100644 --- a/lib/libcrypto/aes/asm/aesni-sha1-x86_64.pl +++ b/lib/libcrypto/aes/asm/aesni-sha1-x86_64.pl @@ -89,7 +89,7 @@ $code.=<<___; .type aesni_cbc_sha1_enc,\@abi-omnipotent .align 16 aesni_cbc_sha1_enc: - endbr64 + _CET_ENDBR # caller should check for SSSE3 and AES-NI bits mov OPENSSL_ia32cap_P+0(%rip),%r10d mov OPENSSL_ia32cap_P+4(%rip),%r11d @@ -133,7 +133,7 @@ $code.=<<___; .type aesni_cbc_sha1_enc_ssse3,\@function,6 .align 16 aesni_cbc_sha1_enc_ssse3: - endbr64 + _CET_ENDBR mov `($win64?56:8)`(%rsp),$inp # load 7th argument #shr \$6,$len # debugging artefact #jz .Lepilogue_ssse3 # debugging artefact @@ -652,7 +652,7 @@ $code.=<<___; .type aesni_cbc_sha1_enc_avx,\@function,6 .align 16 aesni_cbc_sha1_enc_avx: - endbr64 + _CET_ENDBR mov `($win64?56:8)`(%rsp),$inp # load 7th argument #shr \$6,$len # debugging artefact #jz .Lepilogue_avx # debugging artefact @@ -1103,7 +1103,7 @@ $code.=<<___; .type ssse3_handler,\@abi-omnipotent .align 16 ssse3_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/aes/asm/aesni-x86_64.pl b/lib/libcrypto/aes/asm/aesni-x86_64.pl index 07d40a84ab1..43013a51fb4 100644 --- a/lib/libcrypto/aes/asm/aesni-x86_64.pl +++ b/lib/libcrypto/aes/asm/aesni-x86_64.pl @@ -242,7 +242,7 @@ $code.=<<___; .type ${PREFIX}_encrypt,\@abi-omnipotent .align 16 ${PREFIX}_encrypt: - endbr64 + _CET_ENDBR movups ($inp),$inout0 # load input mov 240($key),$rounds # key->rounds ___ @@ -256,7 +256,7 @@ $code.=<<___; .type ${PREFIX}_decrypt,\@abi-omnipotent .align 16 ${PREFIX}_decrypt: - endbr64 + _CET_ENDBR movups ($inp),$inout0 # load input mov 240($key),$rounds # key->rounds ___ @@ -286,7 +286,7 @@ $code.=<<___; .type _aesni_${dir}rypt3,\@abi-omnipotent .align 16 _aesni_${dir}rypt3: - endbr64 + _CET_ENDBR $movkey ($key),$rndkey0 shr \$1,$rounds $movkey 16($key),$rndkey1 @@ -331,7 +331,7 @@ $code.=<<___; .type _aesni_${dir}rypt4,\@abi-omnipotent .align 16 _aesni_${dir}rypt4: - endbr64 + _CET_ENDBR $movkey ($key),$rndkey0 shr \$1,$rounds $movkey 16($key),$rndkey1 @@ -377,7 +377,7 @@ $code.=<<___; .type _aesni_${dir}rypt6,\@abi-omnipotent .align 16 _aesni_${dir}rypt6: - endbr64 + _CET_ENDBR $movkey ($key),$rndkey0 shr \$1,$rounds $movkey 16($key),$rndkey1 @@ -442,7 +442,7 @@ $code.=<<___; .type _aesni_${dir}rypt8,\@abi-omnipotent .align 16 _aesni_${dir}rypt8: - endbr64 + _CET_ENDBR $movkey ($key),$rndkey0 shr \$1,$rounds $movkey 16($key),$rndkey1 @@ -531,7 +531,7 @@ $code.=<<___; .type aesni_ecb_encrypt,\@function,5 .align 16 aesni_ecb_encrypt: - endbr64 + _CET_ENDBR and \$-16,$len jz .Lecb_ret @@ -837,7 +837,7 @@ $code.=<<___; .type aesni_ccm64_encrypt_blocks,\@function,6 .align 16 aesni_ccm64_encrypt_blocks: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -1025,7 +1025,7 @@ $code.=<<___; .type aesni_ctr32_encrypt_blocks,\@function,5 .align 16 aesni_ctr32_encrypt_blocks: - endbr64 + _CET_ENDBR lea (%rsp),%rax push %rbp sub \$$frame_size,%rsp @@ -2487,7 +2487,7 @@ $code.=<<___; .type ${PREFIX}_set_decrypt_key,\@abi-omnipotent .align 16 ${PREFIX}_set_decrypt_key: - endbr64 + _CET_ENDBR sub \$8,%rsp call __aesni_set_encrypt_key shl \$4,$bits # rounds-1 after _aesni_set_encrypt_key @@ -2538,7 +2538,7 @@ $code.=<<___; .type ${PREFIX}_set_encrypt_key,\@abi-omnipotent .align 16 ${PREFIX}_set_encrypt_key: - endbr64 + _CET_ENDBR __aesni_set_encrypt_key: sub \$8,%rsp mov \$-1,%rax @@ -2760,7 +2760,7 @@ $code.=<<___ if ($PREFIX eq "aesni"); .type ecb_se_handler,\@abi-omnipotent .align 16 ecb_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2780,7 +2780,7 @@ ecb_se_handler: .type ccm64_se_handler,\@abi-omnipotent .align 16 ccm64_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2822,7 +2822,7 @@ ccm64_se_handler: .type ctr32_se_handler,\@abi-omnipotent .align 16 ctr32_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2858,7 +2858,7 @@ ctr32_se_handler: .type xts_se_handler,\@abi-omnipotent .align 16 xts_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx @@ -2900,7 +2900,7 @@ $code.=<<___; .type cbc_se_handler,\@abi-omnipotent .align 16 cbc_se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/aes/asm/bsaes-x86_64.pl b/lib/libcrypto/aes/asm/bsaes-x86_64.pl index 7098ba27f49..c44a338114a 100644 --- a/lib/libcrypto/aes/asm/bsaes-x86_64.pl +++ b/lib/libcrypto/aes/asm/bsaes-x86_64.pl @@ -813,7 +813,7 @@ $code.=<<___; .type _bsaes_encrypt8,\@abi-omnipotent .align 64 _bsaes_encrypt8: - endbr64 + _CET_ENDBR lea .LBS0(%rip), $const # constants table movdqa ($key), @XMM[9] # round 0 key @@ -878,7 +878,7 @@ $code.=<<___; .type _bsaes_decrypt8,\@abi-omnipotent .align 64 _bsaes_decrypt8: - endbr64 + _CET_ENDBR lea .LBS0(%rip), $const # constants table movdqa ($key), @XMM[9] # round 0 key @@ -970,7 +970,7 @@ $code.=<<___; .type _bsaes_key_convert,\@abi-omnipotent .align 16 _bsaes_key_convert: - endbr64 + _CET_ENDBR lea .Lmasks(%rip), $const movdqu ($inp), %xmm7 # load round 0 key lea 0x10($inp), $inp @@ -1060,7 +1060,7 @@ $code.=<<___; .type bsaes_enc_key_convert,\@function,2 .align 16 bsaes_enc_key_convert: - endbr64 + _CET_ENDBR mov 240($inp),%r10d # pass rounds mov $inp,%rcx # pass key mov $out,%rax # pass key schedule @@ -1075,7 +1075,7 @@ bsaes_enc_key_convert: .align 16 bsaes_encrypt_128: .Lenc128_loop: - endbr64 + _CET_ENDBR movdqu 0x00($inp), @XMM[0] # load input movdqu 0x10($inp), @XMM[1] movdqu 0x20($inp), @XMM[2] @@ -1108,7 +1108,7 @@ bsaes_encrypt_128: .type bsaes_dec_key_convert,\@function,2 .align 16 bsaes_dec_key_convert: - endbr64 + _CET_ENDBR mov 240($inp),%r10d # pass rounds mov $inp,%rcx # pass key mov $out,%rax # pass key schedule @@ -1123,7 +1123,7 @@ bsaes_dec_key_convert: .type bsaes_decrypt_128,\@function,4 .align 16 bsaes_decrypt_128: - endbr64 + _CET_ENDBR .Ldec128_loop: movdqu 0x00($inp), @XMM[0] # load input movdqu 0x10($inp), @XMM[1] @@ -1169,7 +1169,7 @@ $code.=<<___; .type bsaes_ecb_encrypt_blocks,\@abi-omnipotent .align 16 bsaes_ecb_encrypt_blocks: - endbr64 + _CET_ENDBR mov %rsp, %rax .Lecb_enc_prologue: push %rbp @@ -1371,7 +1371,7 @@ $code.=<<___; .type bsaes_ecb_decrypt_blocks,\@abi-omnipotent .align 16 bsaes_ecb_decrypt_blocks: - endbr64 + _CET_ENDBR mov %rsp, %rax .Lecb_dec_prologue: push %rbp @@ -1577,7 +1577,7 @@ $code.=<<___; .type bsaes_cbc_encrypt,\@abi-omnipotent .align 16 bsaes_cbc_encrypt: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); mov 48(%rsp),$arg6 # pull direction flag @@ -1865,7 +1865,7 @@ $code.=<<___; .type bsaes_ctr32_encrypt_blocks,\@abi-omnipotent .align 16 bsaes_ctr32_encrypt_blocks: - endbr64 + _CET_ENDBR mov %rsp, %rax .Lctr_enc_prologue: push %rbp @@ -2107,7 +2107,7 @@ $code.=<<___; .type bsaes_xts_encrypt,\@abi-omnipotent .align 16 bsaes_xts_encrypt: - endbr64 + _CET_ENDBR mov %rsp, %rax .Lxts_enc_prologue: push %rbp @@ -2489,7 +2489,7 @@ $code.=<<___; .type bsaes_xts_decrypt,\@abi-omnipotent .align 16 bsaes_xts_decrypt: - endbr64 + _CET_ENDBR mov %rsp, %rax .Lxts_dec_prologue: push %rbp @@ -2966,7 +2966,7 @@ $code.=<<___; .type se_handler,\@abi-omnipotent .align 16 se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/aes/asm/vpaes-x86_64.pl b/lib/libcrypto/aes/asm/vpaes-x86_64.pl index 8ff8d8602bc..7d92e8d8ca6 100644 --- a/lib/libcrypto/aes/asm/vpaes-x86_64.pl +++ b/lib/libcrypto/aes/asm/vpaes-x86_64.pl @@ -82,7 +82,7 @@ $code.=<<___; .type _vpaes_encrypt_core,\@abi-omnipotent .align 16 _vpaes_encrypt_core: - endbr64 + _CET_ENDBR mov %rdx, %r9 mov \$16, %r11 mov 240(%rdx),%eax @@ -173,7 +173,7 @@ _vpaes_encrypt_core: .type _vpaes_decrypt_core,\@abi-omnipotent .align 16 _vpaes_decrypt_core: - endbr64 + _CET_ENDBR mov %rdx, %r9 # load key mov 240(%rdx),%eax movdqa %xmm9, %xmm1 @@ -281,7 +281,7 @@ _vpaes_decrypt_core: .type _vpaes_schedule_core,\@abi-omnipotent .align 16 _vpaes_schedule_core: - endbr64 + _CET_ENDBR # rdi = key # rsi = size in bits # rdx = buffer @@ -467,7 +467,7 @@ _vpaes_schedule_core: .type _vpaes_schedule_192_smear,\@abi-omnipotent .align 16 _vpaes_schedule_192_smear: - endbr64 + _CET_ENDBR pshufd \$0x80, %xmm6, %xmm0 # d c 0 0 -> c 0 0 0 pxor %xmm0, %xmm6 # -> c+d c 0 0 pshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a @@ -499,7 +499,7 @@ _vpaes_schedule_192_smear: .type _vpaes_schedule_round,\@abi-omnipotent .align 16 _vpaes_schedule_round: - endbr64 + _CET_ENDBR # extract rcon from xmm8 pxor %xmm1, %xmm1 palignr \$15, %xmm8, %xmm1 @@ -567,7 +567,7 @@ _vpaes_schedule_low_round: .type _vpaes_schedule_transform,\@abi-omnipotent .align 16 _vpaes_schedule_transform: - endbr64 + _CET_ENDBR movdqa %xmm9, %xmm1 pandn %xmm0, %xmm1 psrld \$4, %xmm1 @@ -606,7 +606,7 @@ _vpaes_schedule_transform: .type _vpaes_schedule_mangle,\@abi-omnipotent .align 16 _vpaes_schedule_mangle: - endbr64 + _CET_ENDBR movdqa %xmm0, %xmm4 # save xmm0 for later movdqa .Lk_mc_forward(%rip),%xmm5 test %rcx, %rcx @@ -680,7 +680,7 @@ _vpaes_schedule_mangle: .type ${PREFIX}_set_encrypt_key,\@function,3 .align 16 ${PREFIX}_set_encrypt_key: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -729,7 +729,7 @@ $code.=<<___; .type ${PREFIX}_set_decrypt_key,\@function,3 .align 16 ${PREFIX}_set_decrypt_key: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -783,7 +783,7 @@ $code.=<<___; .type ${PREFIX}_encrypt,\@function,3 .align 16 ${PREFIX}_encrypt: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -827,7 +827,7 @@ $code.=<<___; .type ${PREFIX}_decrypt,\@function,3 .align 16 ${PREFIX}_decrypt: - endbr64 + _CET_ENDBR ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -877,7 +877,7 @@ $code.=<<___; .type ${PREFIX}_cbc_encrypt,\@function,6 .align 16 ${PREFIX}_cbc_encrypt: - endbr64 + _CET_ENDBR xchg $key,$len ___ ($len,$key)=($key,$len); @@ -961,7 +961,7 @@ $code.=<<___; .type _vpaes_preheat,\@abi-omnipotent .align 16 _vpaes_preheat: - endbr64 + _CET_ENDBR lea .Lk_s0F(%rip), %r10 movdqa -0x20(%r10), %xmm10 # .Lk_inv movdqa -0x10(%r10), %xmm11 # .Lk_inv+16 @@ -1092,7 +1092,7 @@ $code.=<<___; .type se_handler,\@abi-omnipotent .align 16 se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/bn/arch/amd64/bignum_add.S b/lib/libcrypto/bn/arch/amd64/bignum_add.S index 06298ca69e1..5fe4aae7a1e 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_add.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S b/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S index 5ad712749f2..25ba17bce27 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_cmadd.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_cmul.S b/lib/libcrypto/bn/arch/amd64/bignum_cmul.S index 9199c8f48b6..12f785d63ae 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_cmul.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_mul.S b/lib/libcrypto/bn/arch/amd64/bignum_mul.S index 2d7ed190912..a3552679a20 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_mul.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S b/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S index f02b09b2887..70ff69e372e 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_mul_4_8_alt.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S b/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S index 97be83e1f72..066403b0749 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_mul_8_16_alt.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_sqr.S b/lib/libcrypto/bn/arch/amd64/bignum_sqr.S index c4a0cabf352..54e3f594424 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_sqr.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S b/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S index b228414dcea..7c534ae9073 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_sqr_4_8_alt.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S b/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S index 04efeec7e28..ac0b6f96c29 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_sqr_8_16_alt.S +++ b/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/lib/libcrypto/bn/arch/amd64/bignum_sub.S b/lib/libcrypto/bn/arch/amd64/bignum_sub.S index 11a9bd7edd4..3ff8a305106 100644 --- a/lib/libcrypto/bn/arch/amd64/bignum_sub.S +++ b/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/lib/libcrypto/bn/arch/amd64/word_clz.S b/lib/libcrypto/bn/arch/amd64/word_clz.S index 464a9d90fc3..3926fcd4b0f 100644 --- a/lib/libcrypto/bn/arch/amd64/word_clz.S +++ b/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/lib/libcrypto/bn/asm/modexp512-x86_64.pl b/lib/libcrypto/bn/asm/modexp512-x86_64.pl index af78fff5412..8645d5adcce 100644 --- a/lib/libcrypto/bn/asm/modexp512-x86_64.pl +++ b/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/lib/libcrypto/bn/asm/x86_64-mont.pl b/lib/libcrypto/bn/asm/x86_64-mont.pl index 6f5ab331e2f..30cfab4fce0 100755 --- a/lib/libcrypto/bn/asm/x86_64-mont.pl +++ b/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/lib/libcrypto/bn/asm/x86_64-mont5.pl b/lib/libcrypto/bn/asm/x86_64-mont5.pl index 3b3325a6ccc..38751ec5de5 100755 --- a/lib/libcrypto/bn/asm/x86_64-mont5.pl +++ b/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/lib/libcrypto/bn/s2n_bignum_internal.h b/lib/libcrypto/bn/s2n_bignum_internal.h index f4136883382..b82db7d0196 100644 --- a/lib/libcrypto/bn/s2n_bignum_internal.h +++ b/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__ diff --git a/lib/libcrypto/camellia/asm/cmll-x86_64.pl b/lib/libcrypto/camellia/asm/cmll-x86_64.pl index 3ceed3e8991..187f0596d78 100644 --- a/lib/libcrypto/camellia/asm/cmll-x86_64.pl +++ b/lib/libcrypto/camellia/asm/cmll-x86_64.pl @@ -116,7 +116,7 @@ $code=<<___; .type Camellia_EncryptBlock,\@abi-omnipotent .align 16 Camellia_EncryptBlock: - endbr64 + _CET_ENDBR movl \$128,%eax subl $arg0d,%eax movl \$3,$arg0d @@ -129,7 +129,7 @@ Camellia_EncryptBlock: .align 16 .Lenc_rounds: Camellia_EncryptBlock_Rounds: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r13 @@ -178,7 +178,7 @@ Camellia_EncryptBlock_Rounds: .type _x86_64_Camellia_encrypt,\@abi-omnipotent .align 16 _x86_64_Camellia_encrypt: - endbr64 + _CET_ENDBR xor 0($key),@S[1] xor 4($key),@S[0] # ^=key[0-3] xor 8($key),@S[3] @@ -229,7 +229,7 @@ $code.=<<___; .type Camellia_DecryptBlock,\@abi-omnipotent .align 16 Camellia_DecryptBlock: - endbr64 + _CET_ENDBR movl \$128,%eax subl $arg0d,%eax movl \$3,$arg0d @@ -242,7 +242,7 @@ Camellia_DecryptBlock: .align 16 .Ldec_rounds: Camellia_DecryptBlock_Rounds: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r13 @@ -291,7 +291,7 @@ Camellia_DecryptBlock_Rounds: .type _x86_64_Camellia_decrypt,\@abi-omnipotent .align 16 _x86_64_Camellia_decrypt: - endbr64 + _CET_ENDBR xor 0($key),@S[1] xor 4($key),@S[0] # ^=key[0-3] xor 8($key),@S[3] @@ -406,7 +406,7 @@ $code.=<<___; .type Camellia_Ekeygen,\@function,3 .align 16 Camellia_Ekeygen: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r13 @@ -637,7 +637,7 @@ $code.=<<___; .type Camellia_cbc_encrypt,\@function,6 .align 16 Camellia_cbc_encrypt: - endbr64 + _CET_ENDBR cmp \$0,%rdx je .Lcbc_abort push %rbx diff --git a/lib/libcrypto/md5/asm/md5-x86_64.pl b/lib/libcrypto/md5/asm/md5-x86_64.pl index 06d69094f44..5001c347244 100755 --- a/lib/libcrypto/md5/asm/md5-x86_64.pl +++ b/lib/libcrypto/md5/asm/md5-x86_64.pl @@ -128,7 +128,7 @@ $code .= < +#else +#define _CET_ENDBR +#endif + +___ +} + print "#include \"x86_arch.h\"\n"; while($line=<>) { diff --git a/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl b/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl index 3190e6a8e76..e5e8aa08a19 100644 --- a/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl +++ b/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl @@ -109,7 +109,7 @@ $code.=<<___; .globl $func .type $func,\@function,$nargs $func: - endbr64 + _CET_ENDBR cmp \$0,$len je .Labort push %rbx @@ -454,7 +454,7 @@ $code.=<<___; .type RC4_set_key,\@function,3 .align 16 RC4_set_key: - endbr64 + _CET_ENDBR lea 8($dat),$dat lea ($inp,$len),$inp neg $len diff --git a/lib/libcrypto/rc4/asm/rc4-x86_64.pl b/lib/libcrypto/rc4/asm/rc4-x86_64.pl index 0472acce8ad..a9cf9d1bdf5 100755 --- a/lib/libcrypto/rc4/asm/rc4-x86_64.pl +++ b/lib/libcrypto/rc4/asm/rc4-x86_64.pl @@ -128,7 +128,7 @@ $code=<<___; .type RC4,\@function,4 .align 16 RC4: - endbr64 + _CET_ENDBR or $len,$len jne .Lentry ret @@ -435,7 +435,7 @@ $code.=<<___; .type RC4_set_key,\@function,3 .align 16 RC4_set_key: - endbr64 + _CET_ENDBR lea 8($dat),$dat lea ($inp,$len),$inp neg $len diff --git a/lib/libcrypto/sha/asm/sha1-x86_64.pl b/lib/libcrypto/sha/asm/sha1-x86_64.pl index e15ff47f88b..e080251df45 100755 --- a/lib/libcrypto/sha/asm/sha1-x86_64.pl +++ b/lib/libcrypto/sha/asm/sha1-x86_64.pl @@ -222,7 +222,7 @@ $code.=<<___; .type sha1_block_data_order,\@function,3 .align 16 sha1_block_data_order: - endbr64 + _CET_ENDBR mov OPENSSL_ia32cap_P+0(%rip),%r9d mov OPENSSL_ia32cap_P+4(%rip),%r8d test \$IA32CAP_MASK1_SSSE3,%r8d # check SSSE3 bit @@ -310,7 +310,7 @@ $code.=<<___; .align 16 sha1_block_data_order_ssse3: _ssse3_shortcut: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -731,7 +731,7 @@ $code.=<<___; .align 16 sha1_block_data_order_avx: _avx_shortcut: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 @@ -1102,7 +1102,7 @@ $code.=<<___; .type se_handler,\@abi-omnipotent .align 16 se_handler: - endbr64 + _CET_ENDBR push %rsi push %rdi push %rbx diff --git a/lib/libcrypto/sha/asm/sha512-x86_64.pl b/lib/libcrypto/sha/asm/sha512-x86_64.pl index 120693feeb7..f7a4dad2c9c 100755 --- a/lib/libcrypto/sha/asm/sha512-x86_64.pl +++ b/lib/libcrypto/sha/asm/sha512-x86_64.pl @@ -175,7 +175,7 @@ $code=<<___; .type $func,\@function,4 .align 16 $func: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 diff --git a/lib/libcrypto/whrlpool/asm/wp-x86_64.pl b/lib/libcrypto/whrlpool/asm/wp-x86_64.pl index 7958f6d2897..2a3902430b0 100644 --- a/lib/libcrypto/whrlpool/asm/wp-x86_64.pl +++ b/lib/libcrypto/whrlpool/asm/wp-x86_64.pl @@ -57,7 +57,7 @@ $code=<<___; .type $func,\@function,3 .align 16 $func: - endbr64 + _CET_ENDBR push %rbx push %rbp push %r12 diff --git a/lib/libcrypto/x86_64cpuid.pl b/lib/libcrypto/x86_64cpuid.pl index dc56732a28b..5e85c40c972 100644 --- a/lib/libcrypto/x86_64cpuid.pl +++ b/lib/libcrypto/x86_64cpuid.pl @@ -18,7 +18,7 @@ print<<___; .extern OPENSSL_cpuid_setup .hidden OPENSSL_cpuid_setup .section .init - endbr64 + _CET_ENDBR call OPENSSL_cpuid_setup .extern OPENSSL_ia32cap_P @@ -30,7 +30,7 @@ print<<___; .type OPENSSL_ia32_cpuid,\@abi-omnipotent .align 16 OPENSSL_ia32_cpuid: - endbr64 + _CET_ENDBR mov %rbx,%r8 # save %rbx xor %eax,%eax