2022-09-09 09:59:32

by Alexander Potapenko

[permalink] [raw]
Subject: [PATCH -next 1/2] x86: crypto: kmsan: revert !KMSAN dependencies

This patch reverts "crypto: Kconfig: fix up for "crypto: kmsan: disable
accelerated configs under KMSAN" used by Stephen Rothwell to cleanly
merge KMSAN patches into linux-next.

Because now arch-specific crypto configs reside in a separate Kconfig
file, we can disable them all by adding a single !KMSAN before including
that file (done in the following patch).

Among others, this patch reverts !KMSAN check for
CONFIG_CRYPTO_AEGIS128_SIMD, which is ARM-only and is hence unnecessary,
because KMSAN does not support ARM yet.

Signed-off-by: Alexander Potapenko <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Eric Biggers <[email protected]>
Cc: Herbert Xu <[email protected]>
Cc: Robert Elliott <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
arch/x86/crypto/Kconfig | 29 -----------------------------
crypto/Kconfig | 1 -
2 files changed, 30 deletions(-)

diff --git a/arch/x86/crypto/Kconfig b/arch/x86/crypto/Kconfig
index 856f5d8ca65f5..9bb0f7939c6bc 100644
--- a/arch/x86/crypto/Kconfig
+++ b/arch/x86/crypto/Kconfig
@@ -5,7 +5,6 @@ menu "Accelerated Cryptographic Algorithms for CPU (x86)"
config CRYPTO_CURVE25519_X86
tristate "Public key crypto: Curve25519 (ADX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_LIB_CURVE25519_GENERIC
select CRYPTO_ARCH_HAVE_LIB_CURVE25519
help
@@ -17,7 +16,6 @@ config CRYPTO_CURVE25519_X86
config CRYPTO_AES_NI_INTEL
tristate "Ciphers: AES, modes: ECB, CBC, CTS, CTR, XTR, XTS, GCM (AES-NI)"
depends on X86
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_AEAD
select CRYPTO_LIB_AES
select CRYPTO_ALGAPI
@@ -34,7 +32,6 @@ config CRYPTO_AES_NI_INTEL
config CRYPTO_BLOWFISH_X86_64
tristate "Ciphers: Blowfish, modes: ECB, CBC"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_BLOWFISH_COMMON
imply CRYPTO_CTR
@@ -47,7 +44,6 @@ config CRYPTO_BLOWFISH_X86_64
config CRYPTO_CAMELLIA_X86_64
tristate "Ciphers: Camellia with modes: ECB, CBC"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
imply CRYPTO_CTR
help
@@ -59,7 +55,6 @@ config CRYPTO_CAMELLIA_X86_64
config CRYPTO_CAMELLIA_AESNI_AVX_X86_64
tristate "Ciphers: Camellia with modes: ECB, CBC (AES-NI/AVX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_CAMELLIA_X86_64
select CRYPTO_SIMD
@@ -74,7 +69,6 @@ config CRYPTO_CAMELLIA_AESNI_AVX_X86_64
config CRYPTO_CAMELLIA_AESNI_AVX2_X86_64
tristate "Ciphers: Camellia with modes: ECB, CBC (AES-NI/AVX2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_CAMELLIA_AESNI_AVX_X86_64
help
Length-preserving ciphers: Camellia with ECB and CBC modes
@@ -86,7 +80,6 @@ config CRYPTO_CAMELLIA_AESNI_AVX2_X86_64
config CRYPTO_CAST5_AVX_X86_64
tristate "Ciphers: CAST5 with modes: ECB, CBC (AVX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_CAST5
select CRYPTO_CAST_COMMON
@@ -104,7 +97,6 @@ config CRYPTO_CAST5_AVX_X86_64
config CRYPTO_CAST6_AVX_X86_64
tristate "Ciphers: CAST6 with modes: ECB, CBC (AVX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_CAST6
select CRYPTO_CAST_COMMON
@@ -123,7 +115,6 @@ config CRYPTO_CAST6_AVX_X86_64
config CRYPTO_DES3_EDE_X86_64
tristate "Ciphers: Triple DES EDE with modes: ECB, CBC"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_LIB_DES
imply CRYPTO_CTR
@@ -138,7 +129,6 @@ config CRYPTO_DES3_EDE_X86_64
config CRYPTO_SERPENT_SSE2_X86_64
tristate "Ciphers: Serpent with modes: ECB, CBC (SSE2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_SERPENT
select CRYPTO_SIMD
@@ -155,7 +145,6 @@ config CRYPTO_SERPENT_SSE2_X86_64
config CRYPTO_SERPENT_SSE2_586
tristate "Ciphers: Serpent with modes: ECB, CBC (32-bit with SSE2)"
depends on X86 && !64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_SERPENT
select CRYPTO_SIMD
@@ -172,7 +161,6 @@ config CRYPTO_SERPENT_SSE2_586
config CRYPTO_SERPENT_AVX_X86_64
tristate "Ciphers: Serpent with modes: ECB, CBC (AVX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_SERPENT
select CRYPTO_SIMD
@@ -190,7 +178,6 @@ config CRYPTO_SERPENT_AVX_X86_64
config CRYPTO_SERPENT_AVX2_X86_64
tristate "Ciphers: Serpent with modes: ECB, CBC (AVX2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SERPENT_AVX_X86_64
help
Length-preserving ciphers: Serpent cipher algorithm
@@ -258,7 +245,6 @@ config CRYPTO_TWOFISH_586
config CRYPTO_TWOFISH_X86_64
tristate "Ciphers: Twofish"
depends on (X86 || UML_X86) && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_ALGAPI
select CRYPTO_TWOFISH_COMMON
imply CRYPTO_CTR
@@ -270,7 +256,6 @@ config CRYPTO_TWOFISH_X86_64
config CRYPTO_TWOFISH_X86_64_3WAY
tristate "Ciphers: Twofish with modes: ECB, CBC (3-way parallel)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_TWOFISH_COMMON
select CRYPTO_TWOFISH_X86_64
@@ -286,7 +271,6 @@ config CRYPTO_TWOFISH_X86_64_3WAY
config CRYPTO_TWOFISH_AVX_X86_64
tristate "Ciphers: Twofish with modes: ECB, CBC (AVX)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_SIMD
select CRYPTO_TWOFISH_COMMON
@@ -305,7 +289,6 @@ config CRYPTO_TWOFISH_AVX_X86_64
config CRYPTO_CHACHA20_X86_64
tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (SSSE3/AVX2/AVX-512VL)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SKCIPHER
select CRYPTO_LIB_CHACHA_GENERIC
select CRYPTO_ARCH_HAVE_LIB_CHACHA
@@ -321,7 +304,6 @@ config CRYPTO_CHACHA20_X86_64
config CRYPTO_AEGIS128_AESNI_SSE2
tristate "AEAD ciphers: AEGIS-128 (AES-NI/SSE2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_AEAD
select CRYPTO_SIMD
help
@@ -334,7 +316,6 @@ config CRYPTO_AEGIS128_AESNI_SSE2
config CRYPTO_NHPOLY1305_SSE2
tristate "Hash functions: NHPoly1305 (SSE2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_NHPOLY1305
help
NHPoly1305 hash function for Adiantum
@@ -345,7 +326,6 @@ config CRYPTO_NHPOLY1305_SSE2
config CRYPTO_NHPOLY1305_AVX2
tristate "Hash functions: NHPoly1305 (AVX2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_NHPOLY1305
help
NHPoly1305 hash function for Adiantum
@@ -356,7 +336,6 @@ config CRYPTO_NHPOLY1305_AVX2
config CRYPTO_BLAKE2S_X86
bool "Hash functions: BLAKE2s (SSSE3/AVX-512)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_LIB_BLAKE2S_GENERIC
select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
help
@@ -379,7 +358,6 @@ config CRYPTO_POLYVAL_CLMUL_NI
config CRYPTO_POLY1305_X86_64
tristate "Hash functions: Poly1305 (SSE2/AVX2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_LIB_POLY1305_GENERIC
select CRYPTO_ARCH_HAVE_LIB_POLY1305
help
@@ -392,7 +370,6 @@ config CRYPTO_POLY1305_X86_64
config CRYPTO_SHA1_SSSE3
tristate "Hash functions: SHA-1 (SSSE3/AVX/AVX2/SHA-NI)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SHA1
select CRYPTO_HASH
help
@@ -407,7 +384,6 @@ config CRYPTO_SHA1_SSSE3
config CRYPTO_SHA256_SSSE3
tristate "Hash functions: SHA-224 and SHA-256 (SSSE3/AVX/AVX2/SHA-NI)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SHA256
select CRYPTO_HASH
help
@@ -422,7 +398,6 @@ config CRYPTO_SHA256_SSSE3
config CRYPTO_SHA512_SSSE3
tristate "Hash functions: SHA-384 and SHA-512 (SSSE3/AVX/AVX2)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_SHA512
select CRYPTO_HASH
help
@@ -449,7 +424,6 @@ config CRYPTO_SM3_AVX_X86_64
config CRYPTO_GHASH_CLMUL_NI_INTEL
tristate "Hash functions: GHASH (CLMUL-NI)"
depends on X86 && 64BIT
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_CRYPTD
help
GCM GHASH hash function (NIST SP800-38D)
@@ -460,7 +434,6 @@ config CRYPTO_GHASH_CLMUL_NI_INTEL
config CRYPTO_CRC32C_INTEL
tristate "CRC32c (SSE4.2/PCLMULQDQ)"
depends on X86
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_HASH
help
CRC32c CRC algorithm with the iSCSI polynomial (RFC 3385 and RFC 3720)
@@ -472,7 +445,6 @@ config CRYPTO_CRC32C_INTEL
config CRYPTO_CRC32_PCLMUL
tristate "CRC32 (PCLMULQDQ)"
depends on X86
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_HASH
select CRC32
help
@@ -484,7 +456,6 @@ config CRYPTO_CRC32_PCLMUL
config CRYPTO_CRCT10DIF_PCLMUL
tristate "CRCT10DIF (PCLMULQDQ)"
depends on X86 && 64BIT && CRC_T10DIF
- depends on !KMSAN # avoid false positives from assembly
select CRYPTO_HASH
help
CRC16 CRC algorithm used for the T10 (SCSI) Data Integrity Field (DIF)
diff --git a/crypto/Kconfig b/crypto/Kconfig
index 1dfe0583f302c..40423a14f86f5 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -796,7 +796,6 @@ config CRYPTO_AEGIS128
config CRYPTO_AEGIS128_SIMD
bool "AEGIS-128 (arm NEON, arm64 NEON)"
depends on CRYPTO_AEGIS128 && ((ARM || ARM64) && KERNEL_MODE_NEON)
- depends on !KMSAN # avoid false positives from assembly
default y
help
AEGIS-128 AEAD algorithm
--
2.37.2.789.g6183377224-goog


2022-09-09 09:59:56

by Alexander Potapenko

[permalink] [raw]
Subject: [PATCH -next 2/2] crypto: x86: kmsan: disable accelerated configs in KMSAN builds

KMSAN is unable to understand when initialized values come from assembly.
Disable accelerated configs in KMSAN builds to prevent false positive
reports.

Signed-off-by: Alexander Potapenko <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Eric Biggers <[email protected]>
Cc: Herbert Xu <[email protected]>
Cc: Robert Elliott <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
crypto/Kconfig | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/crypto/Kconfig b/crypto/Kconfig
index 40423a14f86f5..4a2915bd40d1f 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -1430,7 +1430,9 @@ endif
if SPARC
source "arch/sparc/crypto/Kconfig"
endif
-if X86
+# KMSAN is unable to understand when initialized values come from assembly.
+# Disable accelerated configs to prevent false positive reports.
+if X86 && !KMSAN
source "arch/x86/crypto/Kconfig"
endif

--
2.37.2.789.g6183377224-goog

2022-09-14 00:56:10

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH -next 1/2] x86: crypto: kmsan: revert !KMSAN dependencies

On Fri, 9 Sep 2022 11:58:10 +0200 Alexander Potapenko <[email protected]> wrote:

> This patch reverts "crypto: Kconfig: fix up for "crypto: kmsan: disable
> accelerated configs under KMSAN" used by Stephen Rothwell to cleanly
> merge KMSAN patches into linux-next.
>
> Because now arch-specific crypto configs reside in a separate Kconfig
> file, we can disable them all by adding a single !KMSAN before including
> that file (done in the following patch).
>
> Among others, this patch reverts !KMSAN check for
> CONFIG_CRYPTO_AEGIS128_SIMD, which is ARM-only and is hence unnecessary,
> because KMSAN does not support ARM yet.

As I understand it, these patches are against linux-next and only
linux-next because they pertain to linux-next's resolution of conflicts
between the MM tree and the crypto tree?

I'm not sure how to handle that, even if anyone wants to. How about
you send an update to
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm's mm-unstable
branch so the code which is there makes sense? Then we'll ask Stephen
to redo the crypto tree resolution?

2022-09-14 08:23:27

by Alexander Potapenko

[permalink] [raw]
Subject: Re: [PATCH -next 1/2] x86: crypto: kmsan: revert !KMSAN dependencies

On Wed, Sep 14, 2022 at 2:52 AM Andrew Morton <[email protected]> wrote:
>
> On Fri, 9 Sep 2022 11:58:10 +0200 Alexander Potapenko <[email protected]> wrote:
>
> > This patch reverts "crypto: Kconfig: fix up for "crypto: kmsan: disable
> > accelerated configs under KMSAN" used by Stephen Rothwell to cleanly
> > merge KMSAN patches into linux-next.
> >
> > Because now arch-specific crypto configs reside in a separate Kconfig
> > file, we can disable them all by adding a single !KMSAN before including
> > that file (done in the following patch).
> >
> > Among others, this patch reverts !KMSAN check for
> > CONFIG_CRYPTO_AEGIS128_SIMD, which is ARM-only and is hence unnecessary,
> > because KMSAN does not support ARM yet.
>
> As I understand it, these patches are against linux-next and only
> linux-next because they pertain to linux-next's resolution of conflicts
> between the MM tree and the crypto tree?

The thing is that this patch only makes sense with its counterpart
that adds a !KMSAN condition on "source arch/x86/crypto/Kconfig", and
the latter file is missing in the -mm tree.

> I'm not sure how to handle that, even if anyone wants to. How about
> you send an update to
> git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm's mm-unstable
> branch so the code which is there makes sense? Then we'll ask Stephen
> to redo the crypto tree resolution?

Because the crypto tree is moving code crypto/Kconfig to
arch/x86/crypto/Kconfig, we'll still need to apply these two patches
to the result of the crypto tree merge.

I was going to send out the updated patch series anyway (there are
minor improvements to the core which let us drop "kmsan: unpoison @tlb
in arch_tlb_gather_mmu()", also there's a new test case).
I could drop "crypto: kmsan: disable accelerated configs under KMSAN"
from it, so that it would be possible to enable accelerated configs
under KMSAN at the cost of false positives (which are only visible if
one builds with KMSAN).
Then, once arch/x86/crypto/Kconfig hits -mm, I can send the remaining
patch that disables accelerated crypto under KMSAN:
https://lore.kernel.org/all/[email protected]/

Or I could just send v7 patches against mm-unstable and ask Stephen to
apply both https://lore.kernel.org/all/[email protected]/
and https://lore.kernel.org/all/[email protected]/
at merge time.

Which option is better?


--
Alexander Potapenko
Software Engineer

Google Germany GmbH
Erika-Mann-Straße, 33
80636 München

Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

2022-09-16 09:25:17

by Alexander Potapenko

[permalink] [raw]
Subject: Re: [PATCH -next 2/2] crypto: x86: kmsan: disable accelerated configs in KMSAN builds

Hi Stephen,

Please use this patch to replace "crypto: x86: kmsan: disable
accelerated configs in KMSAN builds" when merging linux-mm into
linux-next (assuming arch/x86/crypto/Kconfig is still in -next).

On Fri, Sep 9, 2022 at 11:58 AM Alexander Potapenko <[email protected]> wrote:
>
> KMSAN is unable to understand when initialized values come from assembly.
> Disable accelerated configs in KMSAN builds to prevent false positive
> reports.
>
> Signed-off-by: Alexander Potapenko <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Eric Biggers <[email protected]>
> Cc: Herbert Xu <[email protected]>
> Cc: Robert Elliott <[email protected]>
> Cc: Stephen Rothwell <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> ---
> crypto/Kconfig | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/crypto/Kconfig b/crypto/Kconfig
> index 40423a14f86f5..4a2915bd40d1f 100644
> --- a/crypto/Kconfig
> +++ b/crypto/Kconfig
> @@ -1430,7 +1430,9 @@ endif
> if SPARC
> source "arch/sparc/crypto/Kconfig"
> endif
> -if X86
> +# KMSAN is unable to understand when initialized values come from assembly.
> +# Disable accelerated configs to prevent false positive reports.
> +if X86 && !KMSAN
> source "arch/x86/crypto/Kconfig"
> endif
>
> --
> 2.37.2.789.g6183377224-goog
>


--
Alexander Potapenko
Software Engineer

Google Germany GmbH
Erika-Mann-Straße, 33
80636 München

Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

2022-09-18 21:49:40

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [PATCH -next 2/2] crypto: x86: kmsan: disable accelerated configs in KMSAN builds

Hi Alexander,

On Fri, 16 Sep 2022 11:23:47 +0200 Alexander Potapenko <[email protected]> wrote:
>
> Please use this patch to replace "crypto: x86: kmsan: disable
> accelerated configs in KMSAN builds" when merging linux-mm into
> linux-next (assuming arch/x86/crypto/Kconfig is still in -next).

OK, will do from today.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature