| From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Date: Fri, 1 Dec 2017 10:42:03 +0100 |
| Subject: [PATCH] arm*: disable NEON in kernel mode |
| |
| NEON in kernel mode is used by the crypto algorithms and raid6 code. |
| While the raid6 code looks okay, the crypto algorithms do not: NEON |
| is enabled on first invocation and may allocate/free/map memory before |
| the NEON mode is disabled again. |
| This needs to be changed until it can be enabled. |
| On ARM NEON in kernel mode can be simply disabled. on ARM64 it needs to |
| stay on due to possible EFI callbacks so here I disable each algorithm. |
| |
| Cc: stable-rt@vger.kernel.org |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| arch/arm/Kconfig | 2 +- |
| arch/arm64/crypto/Kconfig | 30 +++++++++++++++--------------- |
| 2 files changed, 16 insertions(+), 16 deletions(-) |
| |
| --- a/arch/arm/Kconfig |
| +++ b/arch/arm/Kconfig |
| @@ -2135,7 +2135,7 @@ config NEON |
| |
| config KERNEL_MODE_NEON |
| bool "Support for NEON in kernel mode" |
| - depends on NEON && AEABI |
| + depends on NEON && AEABI && !PREEMPT_RT_BASE |
| help |
| Say Y to include support for NEON in kernel mode. |
| |
| --- a/arch/arm64/crypto/Kconfig |
| +++ b/arch/arm64/crypto/Kconfig |
| @@ -19,43 +19,43 @@ config CRYPTO_SHA512_ARM64 |
| |
| config CRYPTO_SHA1_ARM64_CE |
| tristate "SHA-1 digest algorithm (ARMv8 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_SHA1 |
| |
| config CRYPTO_SHA2_ARM64_CE |
| tristate "SHA-224/SHA-256 digest algorithm (ARMv8 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_SHA256_ARM64 |
| |
| config CRYPTO_SHA512_ARM64_CE |
| tristate "SHA-384/SHA-512 digest algorithm (ARMv8 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_SHA512_ARM64 |
| |
| config CRYPTO_SHA3_ARM64 |
| tristate "SHA3 digest algorithm (ARMv8.2 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_SHA3 |
| |
| config CRYPTO_SM3_ARM64_CE |
| tristate "SM3 digest algorithm (ARMv8.2 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_SM3 |
| |
| config CRYPTO_SM4_ARM64_CE |
| tristate "SM4 symmetric cipher (ARMv8.2 Crypto Extensions)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_ALGAPI |
| select CRYPTO_SM4 |
| |
| config CRYPTO_GHASH_ARM64_CE |
| tristate "GHASH/AES-GCM using ARMv8 Crypto Extensions" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| select CRYPTO_GF128MUL |
| select CRYPTO_AES |
| @@ -63,7 +63,7 @@ config CRYPTO_GHASH_ARM64_CE |
| |
| config CRYPTO_CRCT10DIF_ARM64_CE |
| tristate "CRCT10DIF digest algorithm using PMULL instructions" |
| - depends on KERNEL_MODE_NEON && CRC_T10DIF |
| + depends on KERNEL_MODE_NEON && CRC_T10DIF && !PREEMPT_RT_BASE |
| select CRYPTO_HASH |
| |
| config CRYPTO_AES_ARM64 |
| @@ -72,13 +72,13 @@ config CRYPTO_AES_ARM64 |
| |
| config CRYPTO_AES_ARM64_CE |
| tristate "AES core cipher using ARMv8 Crypto Extensions" |
| - depends on ARM64 && KERNEL_MODE_NEON |
| + depends on ARM64 && KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_ALGAPI |
| select CRYPTO_AES_ARM64 |
| |
| config CRYPTO_AES_ARM64_CE_CCM |
| tristate "AES in CCM mode using ARMv8 Crypto Extensions" |
| - depends on ARM64 && KERNEL_MODE_NEON |
| + depends on ARM64 && KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_ALGAPI |
| select CRYPTO_AES_ARM64_CE |
| select CRYPTO_AES_ARM64 |
| @@ -86,7 +86,7 @@ config CRYPTO_AES_ARM64_CE_CCM |
| |
| config CRYPTO_AES_ARM64_CE_BLK |
| tristate "AES in ECB/CBC/CTR/XTS modes using ARMv8 Crypto Extensions" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_BLKCIPHER |
| select CRYPTO_AES_ARM64_CE |
| select CRYPTO_AES_ARM64 |
| @@ -94,7 +94,7 @@ config CRYPTO_AES_ARM64_CE_BLK |
| |
| config CRYPTO_AES_ARM64_NEON_BLK |
| tristate "AES in ECB/CBC/CTR/XTS modes using NEON instructions" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_BLKCIPHER |
| select CRYPTO_AES_ARM64 |
| select CRYPTO_AES |
| @@ -102,18 +102,18 @@ config CRYPTO_AES_ARM64_NEON_BLK |
| |
| config CRYPTO_CHACHA20_NEON |
| tristate "ChaCha20, XChaCha20, and XChaCha12 stream ciphers using NEON instructions" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_BLKCIPHER |
| select CRYPTO_CHACHA20 |
| |
| config CRYPTO_NHPOLY1305_NEON |
| tristate "NHPoly1305 hash function using NEON instructions (for Adiantum)" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_NHPOLY1305 |
| |
| config CRYPTO_AES_ARM64_BS |
| tristate "AES in ECB/CBC/CTR/XTS modes using bit-sliced NEON algorithm" |
| - depends on KERNEL_MODE_NEON |
| + depends on KERNEL_MODE_NEON && !PREEMPT_RT_BASE |
| select CRYPTO_BLKCIPHER |
| select CRYPTO_AES_ARM64_NEON_BLK |
| select CRYPTO_AES_ARM64 |