]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: tegra - Add missing CRYPTO_ALG_ASYNC
authorEric Biggers <ebiggers@kernel.org>
Mon, 16 Mar 2026 20:21:19 +0000 (13:21 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Apr 2026 12:29:54 +0000 (14:29 +0200)
commit 4b56770d345524fc2acc143a2b85539cf7d74bc1 upstream.

The tegra crypto driver failed to set the CRYPTO_ALG_ASYNC on its
asynchronous algorithms, causing the crypto API to select them for users
that request only synchronous algorithms.  This causes crashes (at
least).  Fix this by adding the flag like what the other drivers do.
Also remove the unnecessary CRYPTO_ALG_TYPE_* flags, since those just
get ignored and overridden by the registration function anyway.

Reported-by: Zorro Lang <zlang@redhat.com>
Closes: https://lore.kernel.org/r/20260314080937.pghb4aa7d4je3mhh@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com
Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver")
Cc: stable@vger.kernel.org
Cc: Akhil R <akhilrajeev@nvidia.com>
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/crypto/tegra/tegra-se-aes.c
drivers/crypto/tegra/tegra-se-hash.c

index 0e07d0523291a59a86793ed9d575353147084da4..9210cceb4b7b2c0ae13f3913956139d07861bee2 100644 (file)
@@ -529,7 +529,7 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                                .cra_name = "cbc(aes)",
                                .cra_driver_name = "cbc-aes-tegra",
                                .cra_priority = 500,
-                               .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = AES_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_aes_ctx),
                                .cra_alignmask = 0xf,
@@ -550,7 +550,7 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                                .cra_name = "ecb(aes)",
                                .cra_driver_name = "ecb-aes-tegra",
                                .cra_priority = 500,
-                               .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = AES_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_aes_ctx),
                                .cra_alignmask = 0xf,
@@ -572,7 +572,7 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                                .cra_name = "ctr(aes)",
                                .cra_driver_name = "ctr-aes-tegra",
                                .cra_priority = 500,
-                               .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | CRYPTO_ALG_ASYNC,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = 1,
                                .cra_ctxsize = sizeof(struct tegra_aes_ctx),
                                .cra_alignmask = 0xf,
@@ -594,6 +594,7 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                                .cra_name = "xts(aes)",
                                .cra_driver_name = "xts-aes-tegra",
                                .cra_priority = 500,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = AES_BLOCK_SIZE,
                                .cra_ctxsize       = sizeof(struct tegra_aes_ctx),
                                .cra_alignmask     = (__alignof__(u64) - 1),
@@ -1922,6 +1923,7 @@ static struct tegra_se_alg tegra_aead_algs[] = {
                                .cra_name = "gcm(aes)",
                                .cra_driver_name = "gcm-aes-tegra",
                                .cra_priority = 500,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = 1,
                                .cra_ctxsize = sizeof(struct tegra_aead_ctx),
                                .cra_alignmask = 0xf,
@@ -1944,6 +1946,7 @@ static struct tegra_se_alg tegra_aead_algs[] = {
                                .cra_name = "ccm(aes)",
                                .cra_driver_name = "ccm-aes-tegra",
                                .cra_priority = 500,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = 1,
                                .cra_ctxsize = sizeof(struct tegra_aead_ctx),
                                .cra_alignmask = 0xf,
@@ -1971,7 +1974,7 @@ static struct tegra_se_alg tegra_cmac_algs[] = {
                                .cra_name = "cmac(aes)",
                                .cra_driver_name = "tegra-se-cmac",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = AES_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_cmac_ctx),
                                .cra_alignmask = 0,
index 4a298ace6e9f79489e6fe715dda49de40475c95d..06bb5bf0fa335c1bdfb8fffa13bd5ec8e3d26d22 100644 (file)
@@ -761,7 +761,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha1",
                                .cra_driver_name = "tegra-se-sha1",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA1_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -786,7 +786,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha224",
                                .cra_driver_name = "tegra-se-sha224",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA224_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -811,7 +811,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha256",
                                .cra_driver_name = "tegra-se-sha256",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA256_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -836,7 +836,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha384",
                                .cra_driver_name = "tegra-se-sha384",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA384_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -861,7 +861,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha512",
                                .cra_driver_name = "tegra-se-sha512",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA512_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -886,7 +886,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha3-224",
                                .cra_driver_name = "tegra-se-sha3-224",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA3_224_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -911,7 +911,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha3-256",
                                .cra_driver_name = "tegra-se-sha3-256",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA3_256_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -936,7 +936,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha3-384",
                                .cra_driver_name = "tegra-se-sha3-384",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA3_384_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -961,7 +961,7 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "sha3-512",
                                .cra_driver_name = "tegra-se-sha3-512",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH,
+                               .cra_flags = CRYPTO_ALG_ASYNC,
                                .cra_blocksize = SHA3_512_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -988,7 +988,8 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "hmac(sha224)",
                                .cra_driver_name = "tegra-se-hmac-sha224",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK,
+                               .cra_flags = CRYPTO_ALG_ASYNC |
+                                            CRYPTO_ALG_NEED_FALLBACK,
                                .cra_blocksize = SHA224_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -1015,7 +1016,8 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "hmac(sha256)",
                                .cra_driver_name = "tegra-se-hmac-sha256",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK,
+                               .cra_flags = CRYPTO_ALG_ASYNC |
+                                            CRYPTO_ALG_NEED_FALLBACK,
                                .cra_blocksize = SHA256_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -1042,7 +1044,8 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "hmac(sha384)",
                                .cra_driver_name = "tegra-se-hmac-sha384",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK,
+                               .cra_flags = CRYPTO_ALG_ASYNC |
+                                            CRYPTO_ALG_NEED_FALLBACK,
                                .cra_blocksize = SHA384_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,
@@ -1069,7 +1072,8 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                                .cra_name = "hmac(sha512)",
                                .cra_driver_name = "tegra-se-hmac-sha512",
                                .cra_priority = 300,
-                               .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK,
+                               .cra_flags = CRYPTO_ALG_ASYNC |
+                                            CRYPTO_ALG_NEED_FALLBACK,
                                .cra_blocksize = SHA512_BLOCK_SIZE,
                                .cra_ctxsize = sizeof(struct tegra_sha_ctx),
                                .cra_alignmask = 0,