mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
openssl: fix crash on aarch64 if BTI is enabled but no Crypto instructions
On aarch64, if the processor doesn't have the Crypto instructions then OpenSSL will fall back onto the "bit-sliced" assembler routines. When branch protection (BTI) was enabled in OpenSSL these routines were missed, so if BTI is available libssl will immediately abort when it enters this assembler. Backport a patch submitted upstream to add the required call target annotations so that BTI doesn't believe the code is being exploited. (From OE-Core rev: ec555688dbdc87cc695db653201c8d9e20079d22) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
parent
8a20101d14
commit
68f1b7f429
58
meta/recipes-connectivity/openssl/openssl/bti.patch
Normal file
58
meta/recipes-connectivity/openssl/openssl/bti.patch
Normal file
|
@ -0,0 +1,58 @@
|
|||
From ba8a599395f8b770c76316b5f5b0f3838567014f Mon Sep 17 00:00:00 2001
|
||||
From: Tom Cosgrove <tom.cosgrove@arm.com>
|
||||
Date: Tue, 26 Mar 2024 13:18:00 +0000
|
||||
Subject: [PATCH] aarch64: fix BTI in bsaes assembly code
|
||||
|
||||
In Arm systems where BTI is enabled but the Crypto extensions are not (more
|
||||
likely in FVPs than in real hardware), the bit-sliced assembler code will
|
||||
be used. However, this wasn't annotated with BTI instructions when BTI was
|
||||
enabled, so the moment libssl jumps into this code it (correctly) aborts.
|
||||
|
||||
Solve this by adding the missing BTI landing pads.
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/openssl/openssl/pull/23982]
|
||||
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||
---
|
||||
crypto/aes/asm/bsaes-armv8.pl | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/crypto/aes/asm/bsaes-armv8.pl b/crypto/aes/asm/bsaes-armv8.pl
|
||||
index b3c97e439f..c3c5ff3e05 100644
|
||||
--- a/crypto/aes/asm/bsaes-armv8.pl
|
||||
+++ b/crypto/aes/asm/bsaes-armv8.pl
|
||||
@@ -1018,6 +1018,7 @@ _bsaes_key_convert:
|
||||
// Initialisation vector overwritten with last quadword of ciphertext
|
||||
// No output registers, usual AAPCS64 register preservation
|
||||
ossl_bsaes_cbc_encrypt:
|
||||
+ AARCH64_VALID_CALL_TARGET
|
||||
cmp x2, #128
|
||||
bhs .Lcbc_do_bsaes
|
||||
b AES_cbc_encrypt
|
||||
@@ -1270,7 +1271,7 @@ ossl_bsaes_cbc_encrypt:
|
||||
// Output text filled in
|
||||
// No output registers, usual AAPCS64 register preservation
|
||||
ossl_bsaes_ctr32_encrypt_blocks:
|
||||
-
|
||||
+ AARCH64_VALID_CALL_TARGET
|
||||
cmp x2, #8 // use plain AES for
|
||||
blo .Lctr_enc_short // small sizes
|
||||
|
||||
@@ -1476,6 +1477,7 @@ ossl_bsaes_ctr32_encrypt_blocks:
|
||||
// Output ciphertext filled in
|
||||
// No output registers, usual AAPCS64 register preservation
|
||||
ossl_bsaes_xts_encrypt:
|
||||
+ AARCH64_VALID_CALL_TARGET
|
||||
// Stack layout:
|
||||
// sp ->
|
||||
// nrounds*128-96 bytes: key schedule
|
||||
@@ -1921,6 +1923,7 @@ ossl_bsaes_xts_encrypt:
|
||||
// Output plaintext filled in
|
||||
// No output registers, usual AAPCS64 register preservation
|
||||
ossl_bsaes_xts_decrypt:
|
||||
+ AARCH64_VALID_CALL_TARGET
|
||||
// Stack layout:
|
||||
// sp ->
|
||||
// nrounds*128-96 bytes: key schedule
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -12,6 +12,7 @@ SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
|
|||
file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
|
||||
file://0001-Configure-do-not-tweak-mips-cflags.patch \
|
||||
file://0001-Added-handshake-history-reporting-when-test-fails.patch \
|
||||
file://bti.patch \
|
||||
"
|
||||
|
||||
SRC_URI:append:class-nativesdk = " \
|
||||
|
|
Loading…
Reference in New Issue
Block a user