From ee26855eda26c29fae4a809eb23b1f8fcffe32cf Mon Sep 17 00:00:00 2001 From: Adam Langley Date: Fri, 9 Aug 2024 10:00:54 -0700 Subject: [PATCH] CFI tag AES-NI key expansion helpers. 962432c brought in some OpenSSL assembly that's missing CFI start/end tags around some functions. This doesn't trigger the unwind tests in many contexts, but it does trigger test errors on Ubuntu 24.04 for x86-64. Change-Id: Ib97509b4699aa587f084d2fa07fbf01ce61581e2 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/70127 Commit-Queue: Adam Langley Reviewed-by: David Benjamin (cherry picked from commit 6ee4f9de0016ad83223e7b5f1f18b968e6258189) Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/70267 --- crypto/fipsmodule/aes/asm/aesni-x86_64.pl | 10 ++++++++++ gen/bcm/aesni-x86_64-apple.S | 10 ++++++++++ gen/bcm/aesni-x86_64-linux.S | 10 ++++++++++ gen/bcm/aesni-x86_64-win.asm | 10 ++++++++++ 4 files changed, 40 insertions(+) diff --git a/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/crypto/fipsmodule/aes/asm/aesni-x86_64.pl index ab45749c5..d111e3849 100644 --- a/crypto/fipsmodule/aes/asm/aesni-x86_64.pl +++ b/crypto/fipsmodule/aes/asm/aesni-x86_64.pl @@ -3385,6 +3385,7 @@ ${PREFIX}_set_encrypt_key_base: .align 16 .Lkey_expansion_128: +.cfi_startproc $movkey %xmm0,(%rax) lea 16(%rax),%rax .Lkey_expansion_128_cold: @@ -3395,9 +3396,11 @@ ${PREFIX}_set_encrypt_key_base: shufps \$0b11111111,%xmm1,%xmm1 # critical path xorps %xmm1,%xmm0 ret +.cfi_endproc .align 16 .Lkey_expansion_192a: +.cfi_startproc $movkey %xmm0,(%rax) lea 16(%rax),%rax .Lkey_expansion_192a_cold: @@ -3415,9 +3418,11 @@ ${PREFIX}_set_encrypt_key_base: pshufd \$0b11111111,%xmm0,%xmm3 pxor %xmm3,%xmm2 ret +.cfi_endproc .align 16 .Lkey_expansion_192b: +.cfi_startproc movaps %xmm0,%xmm3 shufps \$0b01000100,%xmm0,%xmm5 $movkey %xmm5,(%rax) @@ -3425,9 +3430,11 @@ ${PREFIX}_set_encrypt_key_base: $movkey %xmm3,16(%rax) lea 32(%rax),%rax jmp .Lkey_expansion_192b_warm +.cfi_endproc .align 16 .Lkey_expansion_256a: +.cfi_startproc $movkey %xmm2,(%rax) lea 16(%rax),%rax .Lkey_expansion_256a_cold: @@ -3438,9 +3445,11 @@ ${PREFIX}_set_encrypt_key_base: shufps \$0b11111111,%xmm1,%xmm1 # critical path xorps %xmm1,%xmm0 ret +.cfi_endproc .align 16 .Lkey_expansion_256b: +.cfi_startproc $movkey %xmm0,(%rax) lea 16(%rax),%rax @@ -3451,6 +3460,7 @@ ${PREFIX}_set_encrypt_key_base: shufps \$0b10101010,%xmm1,%xmm1 # critical path xorps %xmm1,%xmm2 ret +.cfi_endproc .size ${PREFIX}_set_encrypt_key_base,.-${PREFIX}_set_encrypt_key_base .globl ${PREFIX}_set_encrypt_key_alt diff --git a/gen/bcm/aesni-x86_64-apple.S b/gen/bcm/aesni-x86_64-apple.S index 23c15c3d2..0247a2d21 100644 --- a/gen/bcm/aesni-x86_64-apple.S +++ b/gen/bcm/aesni-x86_64-apple.S @@ -2082,6 +2082,7 @@ L$enc_key_ret: .p2align 4 L$key_expansion_128: + movups %xmm0,(%rax) leaq 16(%rax),%rax L$key_expansion_128_cold: @@ -2093,8 +2094,10 @@ L$key_expansion_128_cold: xorps %xmm1,%xmm0 ret + .p2align 4 L$key_expansion_192a: + movups %xmm0,(%rax) leaq 16(%rax),%rax L$key_expansion_192a_cold: @@ -2113,8 +2116,10 @@ L$key_expansion_192b_warm: pxor %xmm3,%xmm2 ret + .p2align 4 L$key_expansion_192b: + movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%rax) @@ -2123,8 +2128,10 @@ L$key_expansion_192b: leaq 32(%rax),%rax jmp L$key_expansion_192b_warm + .p2align 4 L$key_expansion_256a: + movups %xmm2,(%rax) leaq 16(%rax),%rax L$key_expansion_256a_cold: @@ -2136,8 +2143,10 @@ L$key_expansion_256a_cold: xorps %xmm1,%xmm0 ret + .p2align 4 L$key_expansion_256b: + movups %xmm0,(%rax) leaq 16(%rax),%rax @@ -2150,6 +2159,7 @@ L$key_expansion_256b: ret + .globl _aes_hw_set_encrypt_key_alt .private_extern _aes_hw_set_encrypt_key_alt diff --git a/gen/bcm/aesni-x86_64-linux.S b/gen/bcm/aesni-x86_64-linux.S index cd695b425..bedd98b44 100644 --- a/gen/bcm/aesni-x86_64-linux.S +++ b/gen/bcm/aesni-x86_64-linux.S @@ -2083,6 +2083,7 @@ _CET_ENDBR .align 16 .Lkey_expansion_128: +.cfi_startproc movups %xmm0,(%rax) leaq 16(%rax),%rax .Lkey_expansion_128_cold: @@ -2093,9 +2094,11 @@ _CET_ENDBR shufps $255,%xmm1,%xmm1 xorps %xmm1,%xmm0 ret +.cfi_endproc .align 16 .Lkey_expansion_192a: +.cfi_startproc movups %xmm0,(%rax) leaq 16(%rax),%rax .Lkey_expansion_192a_cold: @@ -2113,9 +2116,11 @@ _CET_ENDBR pshufd $255,%xmm0,%xmm3 pxor %xmm3,%xmm2 ret +.cfi_endproc .align 16 .Lkey_expansion_192b: +.cfi_startproc movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%rax) @@ -2123,9 +2128,11 @@ _CET_ENDBR movups %xmm3,16(%rax) leaq 32(%rax),%rax jmp .Lkey_expansion_192b_warm +.cfi_endproc .align 16 .Lkey_expansion_256a: +.cfi_startproc movups %xmm2,(%rax) leaq 16(%rax),%rax .Lkey_expansion_256a_cold: @@ -2136,9 +2143,11 @@ _CET_ENDBR shufps $255,%xmm1,%xmm1 xorps %xmm1,%xmm0 ret +.cfi_endproc .align 16 .Lkey_expansion_256b: +.cfi_startproc movups %xmm0,(%rax) leaq 16(%rax),%rax @@ -2149,6 +2158,7 @@ _CET_ENDBR shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret +.cfi_endproc .size aes_hw_set_encrypt_key_base,.-aes_hw_set_encrypt_key_base .globl aes_hw_set_encrypt_key_alt diff --git a/gen/bcm/aesni-x86_64-win.asm b/gen/bcm/aesni-x86_64-win.asm index 4876ed79e..c58550752 100644 --- a/gen/bcm/aesni-x86_64-win.asm +++ b/gen/bcm/aesni-x86_64-win.asm @@ -2187,6 +2187,7 @@ $L$SEH_end_aes_hw_set_encrypt_key_base_4: ALIGN 16 $L$key_expansion_128: + movups XMMWORD[rax],xmm0 lea rax,[16+rax] $L$key_expansion_128_cold: @@ -2198,8 +2199,10 @@ $L$key_expansion_128_cold: xorps xmm0,xmm1 ret + ALIGN 16 $L$key_expansion_192a: + movups XMMWORD[rax],xmm0 lea rax,[16+rax] $L$key_expansion_192a_cold: @@ -2218,8 +2221,10 @@ $L$key_expansion_192b_warm: pxor xmm2,xmm3 ret + ALIGN 16 $L$key_expansion_192b: + movaps xmm3,xmm0 shufps xmm5,xmm0,68 movups XMMWORD[rax],xmm5 @@ -2228,8 +2233,10 @@ $L$key_expansion_192b: lea rax,[32+rax] jmp NEAR $L$key_expansion_192b_warm + ALIGN 16 $L$key_expansion_256a: + movups XMMWORD[rax],xmm2 lea rax,[16+rax] $L$key_expansion_256a_cold: @@ -2241,8 +2248,10 @@ $L$key_expansion_256a_cold: xorps xmm0,xmm1 ret + ALIGN 16 $L$key_expansion_256b: + movups XMMWORD[rax],xmm0 lea rax,[16+rax] @@ -2255,6 +2264,7 @@ $L$key_expansion_256b: ret + global aes_hw_set_encrypt_key_alt ALIGN 16