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 <[email protected]>
Closes: 
https://lore.kernel.org/r/20260314080937.pghb4aa7d4je3...@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com
Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver")
Cc: [email protected]
Cc: Akhil R <[email protected]>
Signed-off-by: Eric Biggers <[email protected]>
---

This patch is targeting crypto/master.

v2: fix tegra-se-hash.c as well, and remove unnecessary type flags

 drivers/crypto/tegra/tegra-se-aes.c  | 11 ++++++----
 drivers/crypto/tegra/tegra-se-hash.c | 30 ++++++++++++++++------------
 2 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/drivers/crypto/tegra/tegra-se-aes.c 
b/drivers/crypto/tegra/tegra-se-aes.c
index 0e07d0523291..9210cceb4b7b 100644
--- a/drivers/crypto/tegra/tegra-se-aes.c
+++ b/drivers/crypto/tegra/tegra-se-aes.c
@@ -527,11 +527,11 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                        .ivsize = AES_BLOCK_SIZE,
                        .base = {
                                .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,
                                .cra_module = THIS_MODULE,
                        },
@@ -548,11 +548,11 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                        .max_keysize = AES_MAX_KEY_SIZE,
                        .base = {
                                .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,
                                .cra_module = THIS_MODULE,
                        },
@@ -570,11 +570,11 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                        .ivsize = AES_BLOCK_SIZE,
                        .base = {
                                .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,
                                .cra_module = THIS_MODULE,
                        },
@@ -592,10 +592,11 @@ static struct tegra_se_alg tegra_aes_algs[] = {
                        .ivsize = AES_BLOCK_SIZE,
                        .base = {
                                .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),
                                .cra_module        = THIS_MODULE,
                        },
@@ -1920,10 +1921,11 @@ static struct tegra_se_alg tegra_aead_algs[] = {
                        .ivsize = GCM_AES_IV_SIZE,
                        .base = {
                                .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,
                                .cra_module = THIS_MODULE,
                        },
@@ -1942,10 +1944,11 @@ static struct tegra_se_alg tegra_aead_algs[] = {
                        .chunksize = AES_BLOCK_SIZE,
                        .base = {
                                .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,
                                .cra_module = THIS_MODULE,
                        },
@@ -1969,11 +1972,11 @@ static struct tegra_se_alg tegra_cmac_algs[] = {
                        .halg.statesize = sizeof(struct tegra_cmac_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_cmac_cra_init,
diff --git a/drivers/crypto/tegra/tegra-se-hash.c 
b/drivers/crypto/tegra/tegra-se-hash.c
index 4a298ace6e9f..06bb5bf0fa33 100644
--- a/drivers/crypto/tegra/tegra-se-hash.c
+++ b/drivers/crypto/tegra/tegra-se-hash.c
@@ -759,11 +759,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -784,11 +784,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -809,11 +809,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -834,11 +834,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -859,11 +859,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -884,11 +884,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -909,11 +909,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -934,11 +934,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -959,11 +959,11 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -986,11 +986,12 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -1013,11 +1014,12 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -1040,11 +1042,12 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,
@@ -1067,11 +1070,12 @@ static struct tegra_se_alg tegra_hash_algs[] = {
                        .halg.statesize = sizeof(struct tegra_sha_reqctx),
                        .halg.base = {
                                .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,
                                .cra_module = THIS_MODULE,
                                .cra_init = tegra_sha_cra_init,

base-commit: 5c52607c43c397b79a9852ce33fc61de58c3645c
-- 
2.53.0


Reply via email to